Я немного не понял... а зачем?
За шкафом. Зачем ты задаешь глупые вопросы?
Вообще не понятно, зачем нужны scalar_objects.
они ОЧЕНЬ нужны. Из-за того, что в PHP их нет этот язык и выглядит коряво.
Тогда уж лучше уйти от PHP.
куда ты от него денешься?
Никто из вас не критикует объект Datetime. Почему? Так это такой же тип данных, как строка или целое. В том плане, что в объекте сокрыта реализация туевой хучи разной бизнес-логики для работы с этим непростым типом данных.
Ничего плохого в объектах-скалярах нет. Начиная с того, что это красивый синтаксический сахар, кончая удобствами разработки.
Возможности расширять и/или наследовать базовые типы с возможностью добавления своих методов - отличное было бы решение.
У меня, скажем, есть расширение Datetime, один из методов которого умеет выводить дату как строку:
PHP:
<?php
class Krugozor_Module_Common_Type_Datetime extends DateTime
{
/**
* Функция возвращает строковое человекопонятное представление времени.
*
* @param void
* @return string
*/
public function formatDateForPeople()
{
// Вчерашняя дата с 0 часов
$yesterday_begin = mktime(0, 0, 0, date("m"), date("d") - 1, date("Y"));
// Вчерашняя дата, за секунду до следующего дня.
$yesterday_end = mktime(23, 59, 59, date("m"), date("d") - 1, date("Y"));
if ($this->getTimestamp() >= $yesterday_begin && $this->getTimestamp() <= $yesterday_end)
{
return 'Вчера в '.$this->format('H:i');
}
else if ($this->getTimestamp() <= $yesterday_end)
{
return $this->format('d.m.Y H:i');
}
else
{
return 'Сегодня в '.$this->format('H:i');
}
}
У меня была идея сделать для скалярных типов объекты, но я ограничился супер-мега-классом для массива, который умеет все, даже кофе варить.
Попутно я все же пришел к объектам для некоторых типов данных.
Например:
PHP:
<?php
class Krugozor_Module_Common_Type_Url implements Krugozor_Module_Common_Type_Interface
{
/**
* URL адрес.
*
* @var string
*/
protected $url;
public function __construct($url)
{
$this->setValue($url);
}
public function getValue()
{
return $this->url;
}
public function setValue($value)
{
$this->url = $value;
}
/**
* Создает "красивый" якорь из длинного URL-адреса. Например, после обработки строки
* <pre>http://test/admin/user/edit/?id=38&referer=http%3A%2F%2Ftest%2Fadmin%2Fuser%2F</pre>
* будет получена строка вида <pre>http://test/admin/article/edit/?id=...%26sep%3D1</pre>
*
* @param string $url гиперссылка
* @param string $simbol символ- или строка- заполнитель
* @param string $repeat количество повторений $simbol
* @param int $ml_url_width_prefix количество символов, оставляемых спереди
* @param int $ml_url_width_postfix количество символов, оставляемых позади
*
* @param void
* @return string
*/
public function getNiceAnchor($width_prefix = 20, $width_postfix = 10, $repeat = 3, $simbol = '.')
{
if (strlen($this->url) > $width_prefix + $width_postfix)
{
return substr($this->url, 0, $width_prefix) . str_repeat($simbol, $repeat) . substr($this->url, -$width_postfix);
}
return $this->url;
}
}
естественно, у меня все куда сложнее, нежели просто тупо этот класс, с виду совершенно невзрачный, но по факту ORM достает объект сущности и св-во URL представлено именно в виде данного объекта. В шаблоне я вызываю:
PHP:
<tr>
<td class="left-col description_td"><img class="adver_description_icon" src="/http/image/desing/icon/world.png" alt="" /> Веб-сайт:</td>
<td><p><span data-url="<?=$this->user->getUrl()->getValue()?>" class="imitation_outer_link" onclick="imitationLink(this)"><?=$this->user->getUrl()->getNiceAnchor()?></span></p></td>
</tr>