2016-10-03 54 views
2

我尋找答案很多,但只找到的東西圍繞着一個人是否可以一類另一個類和類似的東西的問題。如何使用PHP類在另一個類

於是就有了第一個文件,這就是:

文檔1:

class MyClass1 { 

    private $myAttribute1; 
    __construct(){ 
     this->myAttribute1 = 'blabla'; 
    } 
} 

現在要求在同一個文檔

$myObject1 = new MyClass1(); 

作品在NetBeans完全罰款英寸

同時,當我建一個文件,讓叫它文檔2,另築類存在,其目的是使用MyClass1,Netbeans的告訴我有一個問題:

文檔2:

myClass2 { 
    $myAttribute2 = new myClass1(); 
} 

所以這在我的NetBeans中不起作用,只是告訴我'意外的新的'。如何使用MyClass1myClass2,因爲這種方式不能正常工作?

+2

屬性只能分配一個常量表達式。在'__construct()'中做你想做的事。 – AbraCadaver

+1

側面說明,如果你的'myClass2'是在一個單獨的文件,一定要'include'包含'myClass1'文件。 –

回答

5

PHP只允許某些表達式爲初始化值類的屬性可以使用:

class foo { 
    $x = 7; //fine, constant value 
    $y = 7+7; // only fine in recent PHPs 
    $z = new bar(); // illegal in all PHP versions 
} 

7+7版本在最近的PHP版本僅支持,唯一允許的表達式是那些產生的價值完全可以在編譯時計算。由於new不能在編譯時執行,只有在執行時纔會執行,這是永久性的非法表達。

這意味着對「複雜」的表述,只能在運行時計算,你需要做的是表達在構造函數中:

class foo { 
    public $z; 
    function __construct(){ 
     $z = new bar(); 
    } 
} 
+0

非常感謝!這完全回答了我的問題!也許,如果我可以的話,還有一個更加愚蠢的問題:這種語言功能背後的原因是什麼? – LJKS

+2

因爲php不能時間旅行。考慮像'public $ foo = $ GLOBALS ['bar']''。無論創建全局'$ bar'變量的代碼是否可能尚未執行,那麼應將值分配給'$ foo'?一旦你做一個變量賦值,沒有你在哪裏分配的值是從哪裏來的「記憶」,和佔位符值PHP會不會追溯「填滿」。或者你有'public $ foo = file_get_contents('還沒有存在的文件')''。 –

相關問題