Я думаю о создании пользовательских типов данных / прототипов для проекта, над которым я работаю, но мне интересно, если это такая хорошая идея?
Например
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);