提问人:RobertPitt 提问时间:7/27/2010 最后编辑:RobertPitt 更新时间:7/27/2010 访问量:7604
自定义数据类型类
Custom Data-types classes
问:
我正在考虑为我正在处理的项目制作自定义数据类型/原型,但我想知道这是否是一个好主意?
例如
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 等的原型。
使用数组将实现迭代器等
例如,我想到的一些好处是对象的特定数据类型
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);
答:
19赞
Scott Saunders
7/27/2010
#1
在我看来,你花在编写这段代码、修复这段代码以及诅咒你不能在类中使用数百个 PHP 函数这一事实上的时间将超过这段代码可能具有的任何优势。
此外,继承您项目的开发人员会讨厌您。
评论
1赞
RobertPitt
7/27/2010
我可以理解继承这个的开发人员可能会像 WTF 一样,但这会使数据类型操作变得非常容易。
0赞
RobertPitt
7/27/2010
此外,使用 toString,它应该与所有 php 函数完全兼容
1赞
Scott Saunders
7/27/2010
想想所有在字符串或数组上工作的内置 PHP 函数 - 实际上有数百个。所有这些都对你毫无用处。PHP 不会使用你的 String 定义来代替它自己的内部字符串系统。字符串在 PHP 中不是一个对象,你不能像在其他 OOP 语言中那样扩展它。
0赞
RobertPitt
7/27/2010
更新了 POC 以供功能使用。
0赞
Scott Saunders
7/27/2010
我正在学习新东西。适用于字符串,数组怎么样?不过仍然看不出任何优势。
0赞
Matti Virkkunen
7/27/2010
#2
听起来太麻烦了......似乎没有好处。
如果您担心忘记转义内容,请完全停止转义内容并开始使用参数化查询。
评论
0赞
RobertPitt
7/27/2010
诸如 segment(0,22) 等类会有更多的内容,它不仅仅是 db 转义,这是我最不担心的,但原理是从 JavaScript 引擎中获取的,并且我认为能够即时操作任何数据类型的好处是好的。
上一个:从哪里开始使用 C# [已关闭]
下一个:错还是对?While 循环
评论