[英]OOP in PHP, $this->
我作为PHP OO中的新手,在下面的代码中有些不清楚。 对于$this->name
, name
来自哪里? 至于$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
并不是声明属性的最佳方式。 对大多数人来说,你最好使用public
或private
。
最后,您可以在代码中使用$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
表示员工类。 $name
是person
类的变量,因此您不能使用$this
调用父类的变量。 您可以在employee
类中使用$this->set_name()
,因为它扩展了person
类并且是public方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.