0

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

}

谢谢。

4

5 回答 5

1

来自$name父类:

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

作为employee扩展person,它也获得了所有属性。

话虽如此,var这并不是声明属性的最佳方式。你会更好地使用publicprivate大多数。

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

于 2012-09-12T09:04:18.963 回答
1

你应该改变var $nameprotected $name然后你就可以做到。由于亲自构造的构造函数已经设置了名称,因此您不必在员工中重新声明构造函数来执行相同的操作。

于 2012-09-12T09:05:23.753 回答
0

因为 in employeeclass$this表示雇员类。$nameperson类的变量,所以不能用 . 调用父类的变量$this。您可以$this->set_name()employee类中使用,因为它扩展了person类并且是公共方法。

于 2012-09-12T09:10:19.773 回答
0

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

你可以,但使用 setter 可能是个好习惯,因为主类开发人员可能添加了比this->x=x. 尽管如果是这种情况,它应该设置为私有以强制您使用设置器。

注意:不再需要声明类成员变量。它将在 PHP5 中工作,但会在 PHP5 直到版本 5.3 中引发 E_STRICT 警告,从该版本开始,它已被弃用。

于 2012-09-12T09:06:43.997 回答
0

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

protected当你想让你的变量/函数在扩展当前类的所有类中可见时,范围。

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

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

于 2012-09-12T09:08:31.863 回答