PHP Использование родительской переменной класса в конструкторе наследника

149
19 августа 2018, 14:00
<?php
    class BaseClass {
        protected $value1;
        public function set_value1($new_value1) {
            $this->value1 = $new_value1;
        }
        public function get_value1() {
            return $this->value1;
        }
    }
?>
<?php
    require_once "BaseClass.php";
    class NextClass extends BaseClass {
        public $value3;
        public function __construct($this->value1, $val3) {
            $this->value3 = $val3;
        }
    }
    $r = new NextClass("test","Cat");
    var_dump($r->get_value1());
?>

Хочу использовать переменную $value1 в конструкторе наследника.

Ошибка в этой строчке: public function __construct($this->value1, $val3)

Ошибка Parse error: syntax error, unexpected '->' (T_OBJECT_OPERATOR), expecting ')' in

Что-то я недопонимаю в ООП PHP.

Answer 1

Тут ещё нет this, поскольку это ссылка на свой класс. Она доступна только внутри конструктора.

Чтобы использовать value1 из родительского класса, её надо сделать protected, а не private, и в дочернем классе спокойно к ней обращаться по $this->value1.

Answer 2
<?php
class BaseClass {
    protected $value1;
    public function set_value1($new_value1) {
        $this->value1 = $new_value1;
    }
    public function get_value1() {
        return $this->value1;
    }
}
class NextClass extends BaseClass {
    public $value3;
    public function __construct($value, $val3) {
        $this->value3 = $val3;
        $this->value1 = $value;
    }
}
$r = new NextClass("test","Cat");
var_dump($r->get_value1());
READ ALSO
Как настроить CoreDumpDirectory в apache?

Как настроить CoreDumpDirectory в apache?

Периодически на сервере начинают вылазить ошибки в /var/log/apache2/errorlog

205
Загрузить картинку в форму (не через кнопку в форме)

Загрузить картинку в форму (не через кнопку в форме)

Есть ли способ загрузки картинки в форму не через кнопку в форме (Выберите файл)? Имею в виду какие-то встроенные функции в PHP или какой-нибудь...

174
Laravel: сервис-контейнеры и сервис-провайдеры. Что это и зачем?

Laravel: сервис-контейнеры и сервис-провайдеры. Что это и зачем?

Недавно перешел с фреймворка CodeIgniter (в котором была простая схема MVC) на изучение LaravelФреймворк очень понравился, но есть некоторые моменты,...

201
Laravel вызвать контроллер в анонимной функции в роутинге

Laravel вызвать контроллер в анонимной функции в роутинге

В документации полно примеров как вызвать метод контроллера для обработки конкретного urlНапример:

178