2016-07-07 16 views
0

私はPHP/phalconアプリケーションを使用しています。私は2部持っています。サーバー1では、問題はありません。サーバー2(同じコード)では、次のエラーが発生しました。私は同じコードを持っているのでプロパティにセッターがありません

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

'クラスClassName {= nullを プライベート$メール。 } '外部から 私は、 ' $のCLS =新しいClasasName(); $ この場合、エラーは「プロパティ」電子メールに「設定者がありません」 – masterFly

+0

セッターを追加するか、パブリックに可視性を変更するだけです。理由はわかりません1番目のサーバーで同じエラーが発生していません。 あなたはそれがプライベートのプロパティを定義しました。だから私はクラスの外でそれにアクセスするのですか?明らかにそれは動作しません。フレームワークを使用する前にOOPを学んでください。私が知っているのは – Juri

答えて

1

あなたのサーバーでphalconのバージョンを確認してください。私はPhalcon 2.0.13のローカルホストで同じ問題を抱えていましたが、サーバーにPhalcon 2.0.6がありました。

+0

は助けてください。ありがとうございました。このエラーはPhalcon 2.0.10にはありませんが、20.0.13が付属しています。 – masterFly

0

protected変数の全体点は、外部からの変数への直接アクセスを制限することですClassName

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

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

したくない場合は:あなたは次のようにあなたがこれを使用することができますgetset機能

class ClassName { 
    protected $email = null; 

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

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

であなたのClassNameextendする必要がありますprotected変数にアクセスするには

getterssettersを作成すると、protected変数をに変更できます0変数。

注:
あなたのコードは100%同じですか?
error reporting levelsと不一致がありますか?
2つの環境にあるPHPのバージョンは何ですか?
ClassNameにはmagic methods__get__setが含まれていますか(継承されていますか?

__set()は、アクセスできないプロパティにデータを書き込むときに実行されます。
__get()は、アクセスできないプロパティからデータを読み取るために使用されます。

+0

をprivate'ないこれは本当に奇妙です。私は魔法をチェックした。私には、オーバーライドされたメソッドはありません。これらの魔法の方法は、PHPやPhalconやApacheで有効にするには...それらを使用するには?あなたは正確に正しかった – masterFly

0

私は同じ問題を抱えていました。私のモデルはprotected $email からpublic $emailに変更され、エラーは消えました。

関連する問題