0

PHP OO の初心者である私にとって、以下のコードには不明な点があります。の場合$this->namename派生元はどこですか? に関しては、関数/メソッド名のように宣言されたとおり$this->get_pinn_numberに使用して機能させる必要があるのはなぜですか?get_pinn_number

拡張クラスの従業員の場合、$this->name = $employee_name代わりに使用できないのはなぜですか?

class person {  
    var $name;
    public $pinn_number;

    function __construct($persons_name) {
        $this->name = $persons_name;
    }

    function set_name($name="Jay") {
        $this->name = $name;
    }

    function get_name() {
        return $this->name;
    }

    public function get_pinn_number($pinn_number) {
        $this->get_pinn_number = $pinn_number;
        return;
    }
}


class employee extends person {

    function __construct($employee_name) {
         $this->set_name($employee_name);
    }

}

ありがとう。

4

5 に答える 5

1

$name親クラスからのものです:

class person {  
    var $name;
/// ....
class employee extends person {

employeeextendsとしてperson、すべてのプロパティも取得します。

そうは言っても、varプロパティを宣言する最良の方法ではありません。publicor privatefor mostを使用した方がよいでしょう。

最後に、コード内で使用することもでき$this->name=$employee_nameますが、親クラス関数を使用する目的は、本来実行すべきタスクを実行できるようにすることです。親クラスの別の関数でそれを使用する必要があるため、関数がそれに入るデータを検証するとしましょう。設定しただけでは、後で呼び出す別の関数が壊れる可能性があります。

于 2012-09-12T09:04:18.963 に答える
1

に変更var $nameする必要がprotected $nameあり、それを行うことができます。コンストラクターが直接名前を設定しているため、同じことを行うためにコンストラクターを従業員で再宣言する必要はありません。

于 2012-09-12T09:05:23.753 に答える
0

why I cannot use $this->name = $employee_name instead?

可能ですが、セッターを使用することをお勧めします。メイン クラスの開発者がthis->x=x. その場合は、セッターの使用を強制するためにプライベートに設定する必要がありました。

注 : クラス メンバー変数の宣言は不要になりました。PHP5 で動作しますが、バージョン 5.3 までの PHP5 では E_STRICT 警告が発生します。

于 2012-09-12T09:06:43.997 に答える
0

2番目の質問には、次を使用する必要があります。

protected現在のクラスを拡張するすべてのクラスで変数/関数を表示したい場合は、スコープを変更します。

publicスコープを使用して、その変数/関数をどこからでも、他のクラスやオブジェクトのインスタンスから利用できるようにします。

private変数/関数を独自のクラスでのみ表示する場合は、scope を使用します。

于 2012-09-12T09:08:31.863 に答える
0

in employeeclass$thisは従業員クラスを表すためです。$namepersonクラスの変数なので、 を使用して親クラスの変数を呼び出すことはできません$this。クラスを拡張したパブリックメソッドなので$this->set_name()、クラス内で使えます。employeeperson

于 2012-09-12T09:10:19.773 に答える