Учитывая этот фрагмент кода:
<?
class mcClassington
{
var $mcProperty='default';
function mcDoSomething()
{
if($this->mcProperty == (/* new type of same class */)->mcProperty)
{
sameBusiness();
}
else
{
sortIt($this->mcProprety);
}
}
}
Не уверен, как я могу запросить новый объект того типа, который есть у экземпляра $this
.
Я пытаюсь написать эту функцию для базового класса, но пусть классы, которые выходят из него, проверяют свои собственные значения по умолчанию. Все, о чем я мог думать, это супергетто, использующее switch(get_class($this))
, но это полностью разрушило бы динамическую цель кода, над которым я работаю.
РЕДАКТИРОВАТЬ : Итак, я не могу опубликовать полный реальный код. Лучшее, что я могу предоставить, - это статический пример использования, опубликованный ниже.
class displayObject //implements attachable
{
public $layer = null;
public $xPos = Array(
'left'=>null,
'width'=>null,
'margin-left'=>null,
'margin-right'=>null,
'padding-left'=>null,
'padding-right'=>null
);
public $yPos = Array(
'top'=>null,
'height'=>null,
'margin-top'=>null,
'margin-bottom'=>null,
'padding-top'=>null,
'padding-bottom'=>null
);
}
class Button extends displayObject
{
public $link, $image, $backing;
public $xPos = Array(
'left'=>null,
'width'=>'120px',
'margin-left'=>'8px',
'margin-right'=>'8px',
'padding-left'=>null,
'padding-right'=>null
);
public $yPos = Array(
'top'=>null,
'height'=>'108px',
'margin-top'=>'4px',
'margin-bottom'=>'4px',
'padding-top'=>null,
'padding-bottom'=>null
);
}
И затем, в других файлах люди могут использовать класс следующим образом:
$navBar = Array(); // Will hold basic Button Objects
$specialtyButton = new Button();
$specialtyButton->$xPos['width'] = '220px';
$specialtyButton->$yPos['height'] = '220px';
/* and so on... */
Функция, которую я пишу, должна вызываться из базового класса displayObject в формате myFunction($this);
Я пытаюсь решить, сортировать ли псевдо-стили по разным местам в зависимости от того, совпадают они или нет. их значения по умолчанию.
Например, $ specialtyButton будет отсортирован специально, потому что его ширина и высота отличаются от значений по умолчанию для Button, но кнопки внутри $ navBar будут пропущены, поскольку ничего не было задано явно.