gpt4 book ai didi

php - 自定义数据类型类

转载 作者:可可西里 更新时间:2023-10-31 23:56:32 26 4
gpt4 key购买 nike

我正在考虑为我正在进行的项目制作自定义数据类型/原型(prototype),但我想知道这是否是个好主意?

例如

class String
{
var $Value;
private $escaped = false;

function __construct($String)
{
$this->Value = $String;
}

function escape()
{
if($escaped === false)
{
$this->Value = Registry::get('Database')->escape($this->Value);
}
return $this;
}

function trim()
{
$this->Value = trim($this->Value);
return $this;
}

function __toString()
{
return $this->__toString();
}
}
$myValue = new String('Hello World')->trim()->escape();
//$myValue is now prepared for DB insert

会有数组、对象、字符串、资源等的原型(prototype)。

有了数组就会实现 Iterator 之类的

我想到的一些好处是对象的特定数据类型,例如

interface Insert
{
public function Insert(String $Value); //Array / Object / Resource
}

自定义原型(prototype)对所有字符串都有用。

但是您认为资源使用量会超过 yield 吗?


为 POC 更新

$String = new String('ValueText');

sprintf('Test %s',$String); //Works

trim($String); //Works

base64_encode($String); //Works

对于阵列,SPL 库也是完美的。

class Array implements ArrayAccess, Iterator, Countable
{
public function __construct(){}
public function offsetSet($offset,$value){}
public function offsetExists($offset){}
public function offsetUnset($offset){}
public function offsetGet($offset){}
public function rewind(){}
public function current(){}
public function key(){}
public function next(){}
public function valid(){}
public function count(){}
}

另一个想法是可扩展实体

class DatabaseVariable extends String
{
function __construct($string)
{
parent::__constrcut($string);
}

public function escape()
{
//Blah
}
}

让新实体扩展数据类型将使其继承该数据类型的可用方法。

正如关于自动装箱的讨论,这正是我正在寻找的系统,但由于它尚未通过讨论,对于我前几天开始的新项目(论坛系统),你认为我应该继续使用我的想法?,用户将能够与数据类型进行更快的交互,如果有不支持传递对象的函数,我们也可以这样做

$RawResource = $Resourtce->Raw();

//...

$Resource->Set($RawResource);

最佳答案

在我看来,您花在编写此代码、修复此代码以及诅咒您不能在您的类中使用数百个 PHP 函数这一事实所花费的时间将超过此代码可能具有的任何优势。

另外,继承你项目的开发者会讨厌你。

关于php - 自定义数据类型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3338592/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com