我正在考虑为我正在开发的项目制作自定义数据类型/原型,但我想知道它是否是一个好主意?
例如
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);
答案 0 :(得分:14)
在我看来,你花在编写这段代码,修复这段代码以及诅咒你不能在类中使用数百个PHP函数这一事实的时间将超过这段代码的任何优势。
此外,继承您项目的开发人员会讨厌您。
答案 1 :(得分:0)
听起来似乎太麻烦......看似没有任何好处。
如果你担心忘记逃避的事情,请完全停止逃避并开始使用参数化查询。