это мой код:
<?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 () ЗАЧЕМ ? почему мое эхо не работает? Что я написал не так? Спасибо!
Ваш конструктор принимает один аргумент, поэтому он должен быть:
$empl = new employee("Stefan TRALA");
Тогда вы можете удалить echo $empl->set_name()
так как он уже вызывается в конструкторе.
как получить имя?
добавьте эту функцию:
function get_name(){
return $this->name;
}
тогда используйте это:
echo $empl->get_name();
Вы объявили функцию конструктора как часть вашего класса. Функции конструктора вызываются сразу после создания класса, пожалуйста, обратите внимание:
$empl = new employee;
Это создание экземпляра класса, который немедленно вызовет следующее:
function __construct($employee_name) {
$this->set_name($employee_name);
}
Очевидно, что сначала нам нужно передать аргумент этой функции, иначе мы получим эту ошибку.
$empl = new employee("Stefan TRALA");
Если вам нужно изменить это позже, вы можете с set_name
, но он должен быть поставлен изначально.
Кроме того, вы можете изменить родительскую функцию конструктора так, чтобы она ожидала нулевое значение, но принимала правильный аргумент:
function __construct($persons_name = null)
Ваш класс ожидает имя человека в качестве первого аргумента:
function __construct($persons_name) {
И все же вы называете это без:
$empl = new employee;
Вы должны либо сделать имя необязательным:
function __construct($persons_name = '') {
Или передайте это при создании:
$empl = new employee('Joe');
Ваш конструктор принимает аргумент ($ employee_name)
Так что вам нужно создать экземпляр вашего сотрудника с помощью
$ empl = новый сотрудник («Стефан ТРАЛА»);
Но также ваш оператор echo вызывает функцию без возвращаемого значения. Вам нужно использовать функцию get_name, а не set_name, чтобы вернуть значение.
echo $empl->get_name();
Ошибка в вашем коде не в установщиках, вы не указываете параметр в конструкторе.
Ваш код:
$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");
Ошибка не в «сеттере».
Приветствия.