Задать вопрос
zooks
@zooks
Frontend

Почему выводятся неопределенные свойства объектов в PHP?

Доброе утро. Специально допустил ошибку в имени переменной при ее определении. Но код все-равно работает. Что можете посоветовать?
<?php
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);

class Customer {

	var $name1;//error here
	var $lastname;

	function getName() {
		echo 'Name: ';
		echo $this -> lastname;
	}

	function setName($name) {
		$this -> name = $name;
		$this -> getName();
	}
}

$my_client = new Customer;
$my_client -> lastname = 'Doe';
$my_client -> setName('John');

echo '<br>';
echo $my_client -> name . ' (test)<br>';
echo $my_client -> lastname;
?>

Результат работы кода:
Name: Doe
John (test)
Doe
  • Вопрос задан
  • 2506 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 1
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Вместо echo лучше делать var_dump или хотя бы print_r на весь объект, они многое Вам прояснят.

В данном случае когда вы делаете $this -> name = $name; у объекта создается новое свойство name.

object(Customer)[1]
  public 'name1' => null
  public 'lastname' => string 'Doe' (length=3)
  public 'name' => string 'John' (length=4)


PS Ну и вообще в коде у Вам путаница какая то.
Если Вы уж пишите геттер getName - то он должен что то возвращать, а не делать echo абсолютно другой переменной lastname.

PPS Я хочу верить что этот пример был Вами придуман для теста, и Вы не пишите геттеры/сеттеры там где в этом нет никакой необходимости
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Почитайте про "магические методы". Особое внимание на __get() и __set().
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы