貌似你沒有初始化的成員變量,它匹配YOUR_CLASS :: $ lib_SOMELIB,所以PHP是扔的通知。
我會嘗試這樣的:
if ((!isset($this->lib_{$lib})) ||
(!($this->lib_{$lib} instanceof $lib))) {
而且,你可能要考慮使用魔術方法; __set and __get來動態設置YOUR_CLASS的成員變量,所以你不需要維護一個洗衣清單。
- 編輯#2 -
不知道爲什麼你所得到的stdObject錯誤,可能是已經嘗試初始化值早。看看這個片段,看看它是否有幫助。我測試了它並且工作。
class strings
{
public function __toString()
{
return __CLASS__;
}
}
class MyClass
{
private $dynamicMembers = array();
public function loadLibs()
{
$libraries = array('strings');
foreach ($libraries as $lib) {
// Had to do it this way, b/c it was resulting in lib_ and not lib_strings
$memberName = 'lib_' . $lib;
if ((!isset($this->$memberName)) ||
(!($this->$memberName instanceof $lib))) {
var_dump(sprintf('I would have required: (%s)', 'lib/'.$lib.'.lib.php'));
$this->$memberName = new $lib();
} else {
continue;
}
}
}
public function __set($name, $value)
{
$this->dynamicMembers[$name] = $value;
}
public function __get($name)
{
if (array_key_exists($name, $this->dynamicMembers)) {
return $this->dynamicMembers[$name];
}
}
}
$myClass = new MyClass();
$myClass->loadLibs();
var_dump((string) $myClass->lib_strings);
var_dump($myClass->lib_strings);
exit;
- 編輯#1 -
代碼的仔細檢查後,它將顯示你正在試圖創建再加上lazy-load pattern自動加載磁帶機。延遲加載在某些情況下運行良好,但請記住,調用代碼將很難設置要實例化的對象的特定成員屬性,如果這不是問題,則忽略。
此外,我建議對PHP的內置spl_autoload能力讀了。
來自日誌的錯誤信息是什麼? – Hamish 2012-02-15 00:30:25
檢查您的錯誤日誌。每個錯誤500個日誌應在該文件*寫上正常安裝* – ariefbayu 2012-02-15 00:31:47
與我越來越 – wyqydsyq 2012-02-15 00:35:25