поэтому я пытаюсь решить проблему, которая у меня возникает при разработке классов PHP. Я создал базовый класс и назначил частные переменные. У меня есть дочерние классы, расширяющие этот базовый класс, которые делают ссылку и изменяются этими частными переменными через функции базового класса. Вот пример, имейте в виду, я все еще смущен различием между private
и protected
методами / переменными (дайте мне знать, если я ошибаюсь!):
base.class.php
<?php class Base { private $test; public function __construct(){ require('sub.class.php'); $sub = new Sub; echo($this->getTest()); } public function getTest(){ return $this->test; } protected function setTest($value){ $this->test = $value; } } ?>
sub.class.php
<?php class Sub extends Base { public function __construct(){ parent::setTest('hello!'); } } ?>
Поэтому я ожидаю, что результат будет hello!
напечатан на экране – вместо этого ничего нет. Может быть, фундаментальное непонимание классов с моей стороны, или, может быть, я просто делаю что-то неправильно. Любое руководство очень ценится! Благодарю.
РЕДАКТИРОВАТЬ:
Спасибо всем, кто внес свой ответ – я думаю, несмотря на отличные решения, что детские классы на самом деле не то, что мне нужно – кажется, что классы делегатов могут быть более полезными на данный момент, так как мне действительно не нужно ссылаться на базу функции из других классов.
Должно быть так:
base.class.php:
class Base { private $test; public function __construct() { echo $this->getTest(); } public function getTest() { return $this->test; } protected function setTest($value) { $this->test = $value; } }
sub.class.php:
class Sub extends Base { public function __construct() { parent::setTest('hello!'); // Or, $this->setTest('hello!'); parent::__construct(); } }
основной код:
require 'base.class.php'; require 'sub.class.php'; $sub = new Sub; // Will print: hello!