这是LSP违规(php)吗?

时间:2014-11-12 18:14:33

标签: php oop design-patterns liskov-substitution-principle

class Message {

    protected $body;

    public function setBody($body)
    {
        $this->body = $body;
    }

    public function getBody()
    {
        return $this->body;
    }
}

class ExtendedMessage extends Message {

    private $some;

    public function __construct($somedata) 
    {
        $this->some = $somedata;
    }

    public function getBody()
    {
        return $this->some;
    }
}

$a = new Message;

$b = new ExtendedMessage('text');

$a->getBody(); // NULL`

$b->getBody(); // text`

1 个答案:

答案 0 :(得分:0)

如果$ a构造了消息类,则$ body为NULL,因为没有设置任何内容,并且没有__construct()触发(不存在)并将$ body设置为某些内容。

1将body设置为,否则它将始终为NULL

$a = new Message;
$a->setBody("my text here");
$a->getBody(); // returns "my text here"

2将构造函数添加到邮件类

class Message {

    protected $body;

    public function __construct($a="") {
        $this->body = $a;
    }

    // ur code as shown
}

而不是

$a = new Message("my text");
$a->getBody(); // returns "my text"

$b = new Message;
$b->getBody(); // returns "" - emtpy string

在类def

中将消息类中的body设置为空字符串
protected $body = ""; // or whatever u want

它将使用getBody()

返回类构造之后的val