自定义数据类型类

时间:2010-07-26 20:09:17

标签: php types 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

将有Array,Object,String,Resource等原型。

使用数组将实现Iterator等

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

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

自定义原型对所有字符串都很有用。

但是你认为资源使用量会带来好处吗?


已更新为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);

2 个答案:

答案 0 :(得分:14)

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

此外,继承您项目的开发人员会讨厌您。

答案 1 :(得分:0)

听起来似乎太麻烦......看似没有任何好处。

如果你担心忘记逃避的事情,请完全停止逃避并开始使用参数化查询。