2016-07-07 140 views
0

我正在使用PHP/phalcon應用程序。我有2份。在服務器1中,我沒有問題。在服務器2(相同的代碼)我得到以下錯誤。屬性沒有setter

property '<property_name>' does not have a setter

因爲我有同樣的代碼,我很困惑在這裏做什麼。我也看着php.ini錯誤報告,因爲這個錯誤看起來像一個PHP抱怨我的代碼。

但在這兩個地方我沒有~STRICT

class ClassName { 
    protected $email = null; 
} 

從外面我做的,

$cls = new ClassName(); 
$cls->email = 'email'; 

在這種情況下,我得到的錯誤是

財產 '電子郵件' 沒有一個二傳手

+0

實際上,''的名稱值是什麼? –

+0

'class ClassName {0} {private email $ null; }' 從外面我做的, '$ CLS =新ClasasName(); $ cls-> email ='email';' 在這種情況下,我得到的錯誤是'property'電子郵件'沒有setter' – masterFly

+0

只需添加setter或更改公開的可見性,不知道爲什麼你在第一臺服務器上沒有相同的錯誤。 您定義的屬性是私人的。那麼爲什麼我在課堂之外訪問呢?顯然它不起作用。在使用框架之前學習OOP。 – Juri

回答

1

Сheckphalcon版本在您的服務器上。我在使用Phalcon 2.0.13的本地主機上遇到了同樣的問題,並且在服務器上使用了Phalcon 2.0.6。

+0

你是完全正確的。謝謝。 Phalcon 2.0.10中沒有這個錯誤,但是它帶有20.0.13。 – masterFly

0

protected變量的整點是限制從外部直接訪問該變量您的ClassName

要訪問protected變量,你將不得不extendClassNamegetset功能

class ClassName { 
    protected $email = null; 

    public function getEmail() { 
     return $this->email; 
    } 

    public function setEmail($email) { 
     $this->email = $email; 
    } 
} 

您可以使用此如下:

$cls = new ClassName(); 
$cls->setEmail('[email protected]'); 

echo $cls->getEmail(); // outputs: "[email protected]" 

如果你不想創造這些getterssetters的喧囂,你可以改變你的protected變量爲public變量。

對方注意:
你確定你的代碼是100%一樣嗎?
也許您的error reporting levels之間存在不一致?
2環境中的PHP版本是什麼?
也許你的ClassName擁有(或繼承)magic methods__get__set

__set()在將數據寫入不可訪問的屬性時運行。
__get()用於從不可訪問的屬性讀取數據。

+0

這真的很奇怪。我檢查了神奇的方法。我沒有任何重寫的方法。在PHP或Phalcon或Apache中啓用這些魔術方法是否可以使用它們? 請幫助 – masterFly

0

我有同樣的問題。我在我的模型protected $email 更改爲public $email並且錯誤消失。

相關問題