Php抽象类构造函数

时间:2015-05-30 17:51:45

标签: php

有一些方法可以在java中初始化一个抽象类的属性,例如java中的这个例子吗?

public abstract class Person
{

    private String name;

    public Person(String name)
    {
        this.name = name;
    }
}

public class Client extends Person
{
    public Client(String name)
    {
        super(name);
    }
}

这是我的实际代码: 我收到这个错误:“变量$ name似乎未初始化”

abstract class Person
{
    private $name;

    public function Person($name)
    {
        $this->$name = $name;
    }
}

class Client extends Person
{
    private $name;
    public function Client($name)
    {
        parent::Person($name);
    }

}

2 个答案:

答案 0 :(得分:1)

从类变量中删除$

$this->$name = $name;

完全错了,试试:

$this->name = $name;

答案 1 :(得分:1)

除了注释和@Ali Torabi的答案中指出的内容之外,您应该注意的一件事是,在调用子类构造函数时,不会隐式调用父类的构造函数。

来自文档:

为了运行父构造函数,需要在子构造函数中调用parent::__construct()

abstract class Person {
    function __construct() {
        echo 'Person constructor called<br/>';
    }
}

class Client extends Person {
    function __construct() {
        parent::__construct();
        echo 'Client constructor called<br/>';
    }
}

我想这一点很重要,因为在某些语言中会自动调用父构造函数。如果您希望在扩展Person类的所有类中都可以使用$ name变量,则应该保护IMO变量。使用private关键字使属性仅在定义的类中可用。