Я работаю через это учебное руководство: http://www.killerphp.com/tutorials/object-oriented-php/php-objects-page-3.php
Сначала он сделал, чтобы Вы создали метод установщика и метод получателя в классе:
name=$new_name;
}
function get_name(){
return $this->name;
}
}
php?>
И затем Вы создаете объект и повторяете результаты:
set_name("Stefan Mischook");
$jimmy ->set_name("Nick Waddles");
echo "The first Object name is: ".$stefan->get_name();
echo "The second Object name is: ".$jimmy->get_name();
?>
Работы как ожидалось, и я понимаю.
Затем он представляет конструкторов:
class person{
var $name;
function __construct($persons_name) {
$this->name = $persons_name;
}
function set_name($new_name){
$this->name=$new_name;
}
function get_name(){
return $this->name;
}
}
И возвраты как так:
get_name();
?>
Это - весь штраф и имеет смысл.
Затем я попытался объединить два и получил ошибку, таким образом, мне любопытно - конструктор всегда занимает место "получить" функции? Если у Вас есть конструктор, необходимо ли всегда включать аргумент при создании объекта?
Дает ошибки:
set_name("Stefan Mischook");
$jimmy ->set_name("Nick Waddles");
echo "The first Object name is: ".$stefan->get_name();
echo "The second Object name is: ".$jimmy->get_name();
echo "The third Object name is: ".$joel->get_name();
?>
Он дает вам ошибки, потому что конструктор имеет обязательные параметры. Чтобы сделать параметр необязательным, присвойте ему значение по умолчанию, подобное этому
function __construct($persons_name=null) {
if ($persons_name) {
$this->set_name($persons_name);//use the setter in the constructor.
}
}
, теперь это будет работать
$stefan = new person();
$stefan ->set_name("Stefan Mischook");
$joel = new person("Joel Laviolette");
echo "The first Object name is: ".$stefan->get_name();
echo "The second Object name is: ".$joel->get_name();
Конструктор используется для инициализации объекта. В объектно-ориентированном программировании ожидается, что объект не должен существовать, если он не находится в допустимом состоянии. Например, Объект без имени и фамилии может не считаться допустимой сущностью, поэтому при первом создании объекта его следует инициализировать с именем и фамилией в конструкторе.
Причина, по которой вы получили ошибку, заключается в том, что конструктор имеет обязательный параметр, поэтому ему необходимо передать аргумент.
P.S. Я очень ненавижу объяснения объектно-ориентированного программирования, которые пытаются использовать аналогии типа «Собака — млекопитающее». Вероятно, вам следует держаться подальше от этих примеров. Они действительно не дают никакой полезной информации в программировании реального мира, а иногда даже дают студентам иллюзию, что они понимают, как использовать то, чему их учат.
Если вы ищете практическое применение использования конструктора для создания объекта в допустимом состоянии, представьте себе запись блога, которая использует базу данных для сохранения.
Например, не было бы смысла писать длинный пост, а затем называть $BlogPost->save();
, если блог не был сначала инициализирован ссылкой на базу данных. Применением конструктора в данном случае, возможно, было бы
$BlogPost = new BlogPost($Database);
Не имеет смысла писать:
$BlogPost->setDatabase($Database);
каждый раз, когда вы хотите что-то с ним сделать. Может быть, вы забудете написать его один раз, и вам будет интересно, куда исчез пост, на который вы потратили 30 минут. Это пример недопустимого состояния.
Идея состоит в том, что вы включаете все, от чего зависит класс при его первой инициализации, вместо того, чтобы рисковать возможностью того, что объект находится в недопустимом состоянии.
Правка: Исправлены 'два параметра' на один.