2017-10-16 109 views
-2

我不會像OOPs /基於類的'PHP'差不多,我對他們非常可怕。有人可以解釋爲什麼這個代碼打破了嗎?什麼是適當的解決方法。謝謝。PHP共享實例成員變量

<?php 
namespace app\samples; 

use models\Person; 
use helpers\OtherClass; 
use helpers\SomeClass; 

class Sample 
{ 
    private $num = 2; # Working 
    private $str = 'My string'; # Working 
    private $bool = true; # Working 

    private $person = new Person(); # Breaks ?? 
    private $mValues = OtherClass::getValues(); # Breaks ?? 

    public function mFunction1() 
    { 
     SomeClass::doSomething($person, $mValues); // Use $person & $mValues here. 
    } 

    public function mFunction2() 
    { 
     SomeClass::doSomething($person, $mValues); // Use $person & $mValues here. 
    } 
} 
+0

你不知道它是如何破壞的,所以我們不能告訴你它爲什麼破裂或如何修復它。 – Gordon

+0

手冊:屬性聲明可能包括一個初始化,但是這個初始化必須是一個常量值 - 也就是說,它必須能夠在編譯時進行評估,並且不能依賴運行時信息進行評估。 – Progrock

回答

3

PHP documentation on class properties

此[屬性]聲明可以包括初始化,但此初始化必須是一個恆定值 - 即,它必須能夠在編譯時被評估並且不能依賴運行時信息來進行評估。在方法調用

public function __construct() 
{ 
    $this->person = new Person(); 
    $this->mValues = OtherClass::getValues(); 
} 

此外,:

所以,以分配一個新的類或靜態方法的財產的結果,你必須在類的構造函數做到這一點,您必須在您使用的代碼中使用$this的屬性(未定義,因此爲「NULL」)局部變量。

public function mFunction1() 
{ 
    SomeClass::doSomething($this->person, $this->mValues); // Use $person & $mValues here. 
} 
+0

非常感謝你,你真棒!還有一些不錯的人願意教他們的'掌握語言'的新手。希望看到更多像你這樣的人正確運用他們選擇的語言能力。再次感謝!一帆風順! –

+0

@AidenHyde沒問題:)請考慮標記答案爲已接受。 – Finwe