2012-04-06 9 views
2

私はphpを機能と手続き言語として学んでいます。今、客観的に学び始め、重要な質問を得ようとします。変数は変数を宣言することなく動作しますか?

私が持っているコード:

class car { 

    function set_car($model) { 
     $this->model = $model; 
    } 

    function check_model() 
    { 
     if($this->model == "Mercedes") echo "Good car"; 
    } 

} 

$mycar = new car; 
$mycar->set_car("Mercedes"); 

echo $mycar->check_model(); 

それは$モデルの宣言せずに作業を行うのはなぜ?

var $model;開始?

PHPではどの変数の "自動宣言"が機能するのですか? 私はつまらない

答えて

4

PHPのすべてのオブジェクトは、W/O宣言するメンバーを取得することができます

$mycar = new car; 
$mycar->model = "Mercedes"; 
echo $mycar->check_model(); # Good car 

PHPのデフォルトの動作だこと。それらは公開されています。 manualを参照してください。

+0

はい、これを行うことはできますが、*するべきではありません。 OPにそのことについて少し説明する価値がありますか? – liquorvicar

+0

あなたはどちらかと言ってはならないという意味ではありません。定義されていない(動的メンバー)、公開されています。何を特に心配していますか? – hakre

+0

私はそれが絶対に必要でない限り、それは非常に良いオブジェクト指向設計だとは思わない(そして、私はそれが絶対に必要なケースを考えるのに苦労している)。 OPはPHPには新しく(私はOOにも新しいことを推測しています)、彼の危険性を指摘してはならず、デフォルトですべてのクラスプロパティを宣言するべきです。 – liquorvicar

1

いいえ、それは$ modelが関数set_carの引数であるからです。引数は正確には変数ではなく、関数(またはクラスメソッド)の呼び出し時に設定される変数または値のプレースホルダー(参照)です。例えば、$ modelはset_carを呼び出すときに値 "Mercedes"をとります。

1

はい。しかし、このような変数は公開されます。また、 "var"という宣言クラス変数は非難されています - public、protectedまたはprivateを使います。

3

はい、存在しない場合、PHPは即座にそれを宣言します。

拡張を使用して作業するときには、拡張が同じvarnamesを使用し、非公開、保護、またはパブリックを定義していないと奇妙な状況が発生する可能性があるため、推奨します。

さらに詳しい情報: http://www.php.net/manual/en/language.oop5.visibility.php

3

PHPクラスのメンバーはいつでも作成することができます。このようにして、公衆として扱われます。 のプライベート変数を宣言するには、それを宣言する必要があります。

関連する問題