Ооп — Как я могу отобразить содержание сеттеров в PHP с помощью переопределения методов?

это мой код:

<?php
class person {
var $name;
function __construct($persons_name) {
$this->name = $persons_name;
}

public function get_name() {
return $this->name;
}
protected function set_name($new_name) {
if ($this->name !=  "Jimmy Two Guns") {
$this->name = strtoupper($new_name);
}
}
}
class employee extends person {
protected function set_name($new_name) {
if ($new_name ==  "Stefan TRALA") {
$this->name = $new_name;
}

else if ($new_name ==  "Johnny Fingers") {
person::set_name($new_name);
}
}

function __construct($employee_name) {
$this->set_name($employee_name);
}
}

$empl = new employee;
echo $empl->set_name("Stefan TRALA");
?>

Я получаю это предупреждение: Предупреждение: отсутствует аргумент 1 для employee :: __ construct () ЗАЧЕМ ? почему мое эхо не работает? Что я написал не так? Спасибо!

0

Решение

Ваш конструктор принимает один аргумент, поэтому он должен быть:

$empl = new employee("Stefan TRALA");

Тогда вы можете удалить echo $empl->set_name() так как он уже вызывается в конструкторе.


как получить имя?

добавьте эту функцию:

function get_name(){
return $this->name;
}

тогда используйте это:

echo $empl->get_name();
2

Другие решения

Вы объявили функцию конструктора как часть вашего класса. Функции конструктора вызываются сразу после создания класса, пожалуйста, обратите внимание:

$empl = new employee;

Это создание экземпляра класса, который немедленно вызовет следующее:

function __construct($employee_name) {
$this->set_name($employee_name);
}

Очевидно, что сначала нам нужно передать аргумент этой функции, иначе мы получим эту ошибку.

$empl = new employee("Stefan TRALA");

Если вам нужно изменить это позже, вы можете с set_name, но он должен быть поставлен изначально.

Кроме того, вы можете изменить родительскую функцию конструктора так, чтобы она ожидала нулевое значение, но принимала правильный аргумент:

function __construct($persons_name = null)
2

Ваш класс ожидает имя человека в качестве первого аргумента:

function __construct($persons_name) {

И все же вы называете это без:

$empl = new employee;

Вы должны либо сделать имя необязательным:

function __construct($persons_name = '') {

Или передайте это при создании:

$empl = new employee('Joe');
1

Ваш конструктор принимает аргумент ($ employee_name)

Так что вам нужно создать экземпляр вашего сотрудника с помощью
$ empl = новый сотрудник («Стефан ТРАЛА»);

Но также ваш оператор echo вызывает функцию без возвращаемого значения. Вам нужно использовать функцию get_name, а не set_name, чтобы вернуть значение.

echo $empl->get_name();
0

Ошибка в вашем коде не в установщиках, вы не указываете параметр в конструкторе.

Ваш код:

$empl = new employee;
echo $empl->set_name("Stefan TRALA");

Такой же как:

$empl = new employee();
echo $empl->set_name("Stefan TRALA");

Исправление:

$empl = new employee("Stefan TRALA");
// this works, but, no longer necesarilly
//echo $empl->set_name("Stefan TRALA");

Помните, что каждый раз, когда вы используете ключевое слово «new», вы выполняете конструктор.

И конструкторы пишутся так:

$empl = new employee("Stefan TRALA");

Но следует читать (не писать), как это:

$empl = new employee; $empl->__construct("Stefan TRALA");

Ошибка не в «сеттере».

Приветствия.

0
По вопросам рекламы [email protected]