2010-12-10 3 views
0

Im интересно, есть ли способ автоподготовки объекта, если вызывается свойство. Пример:Autocreate object, когда свойство называется

<?php 
    echo $myObj->myProperty 
?> 

Этот код, конечно, сбой, потому что я не инициировал $ myObj перед чтением свойства. Что я ищу - это способ автоматически инициировать $ myObj на основе «myObj».

Что-то вроде:

<?php 
class myObj { 
    public myProperty = 'BlaBla'; 
} 
echo $myObj->myProperty; //outputs BlaBla instead of failing 
?> 

Я знаю о __autoload ($ имя_класс), но что только произведение инициирующего classcode с т включаемых(), так что это не то, что им после.

+2

Я не могу придумать никаких законных целей для такого рода вещей. Почему вы не можете просто инициализировать объект перед доступом к опоре? (Я предполагаю, что у вас есть определенная потребность в том, чтобы он был экземпляром, а не статическим аксессуаром) –

+0

Его потому, что у меня есть скрипт, который будет eval() некоторый контент из базы данных. Это содержимое может включать вызовы объектов, которые еще не созданы. Я мог бы создать все объекты, которые могут быть необходимы *, но зачем это делать, если они не понадобятся. Это просто займет время CPU и память – sunebrodersen

ответ

0

Просто, чтобы закрыть этот вопрос, это то, что я в конечном итоге делает:

preg_match_all("/\\\$(.*?)->/si", $code, $matches); 

I корыто цикла код, который я получаю из базы данных, ищущий любые ссылки на объекты, такие как

$xxxx-> 

Тогда я петля корыта ссылки и создавать объекты

  foreach($matches[1] as $key=>$value) { 
      $$value = Connector::loadConnector($value); 
     } 

Где «loadConnector является:

public function loadConnector($connector, $params = NULL) { 
    require_once $connector. ".php"; 
    $c_name = $connector; 
    return new $c_name($params);  
} 

Это, конечно, на основе моей файловой структуры, и это также нуждается в errorhandling, но до сих пор похоже, он решает мою проблему :)

BR/Sune

1

Вы можете использовать магические методы, чтобы автоматизировать такие вещи, как, что ...

http://www.php.net/manual/en/language.oop5.magic.php

+0

Невозможно понять, какой магический метод использовать - не могли бы вы направить меня в правильном направлении? – sunebrodersen

Смежные вопросы