繁体   English   中英

PHP中的OOP,$ this->

[英]OOP in PHP, $this->

我作为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);
    }

}

谢谢。

$name来自父类:

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

随着employee扩展person它也获得所有属性。

话虽如此, var并不是声明属性的最佳方式。 对大多数人来说,你最好使用publicprivate

最后,您可以在代码中使用$this->name=$employee_name ,但使用父类函数的想法是允许它执行它应该执行的任何任务。 让我们说该函数验证进入它的数据,因为它需要在父类的另一个函数中使用它。 如果您只是设置它,它可能会破坏您稍后调用的另一个函数。

您应该将var $name更改为protected $name ,然后您就可以执行此操作。 由于构造函数已经设置了名称,因此您无需重新声明员工中的构造函数以执行相同的操作。

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

你可以,但使用setter可能是一个好习惯,因为主类开发者可能添加了比这更多的代码 - this->x=x 如果是这种情况,则应将其设置为私有以强制您使用setter。

注意:不再需要声明类成员变量。 它将在PHP5中运行,但会在PHP5中引发一个E_STRICT警告,直到版本5.3,因为它已被弃用。

对于你的第二个问题你应该使用:

当您想要在扩展当前类的所有类中显示变量/函数时, protected范围。

public范围,使该变量/函数可以从对象的任何地方,其他类和实例中获得。

当您希望变量/函数仅在其自己的类中可见时, private范围。

因为在employee$this表示员工类。 $nameperson类的变量,因此您不能使用$this调用父类的变量。 您可以在employee类中使用$this->set_name() ,因为它扩展了person类并且是public方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM