Как получить доступ к полю в PHP (геттеры и сеттеры)?
Вот пример из C#.
public class MyClass
{
int age = 0;
// Свойства. Пока тут нет логики, но мы всегда можем её добавить.
public int Age{ get{return age;} set{age=value;} }
}
В PHP
class MyClass
{
private $field1 = 0; // Если бы это был массив, то $key имел бы смысл.
private $field2; // Как получить значение этого поля магическим методом __get?
// Зачем нам тут $key? У нас $field1 не массив, но без этого аргумента будет ошибка.
public function __get($key)
{
return $this->field1;
}
}
$myClass = new MyClass();
echo $myClass->$field1; // 0 Я обратился к полю через геттер.
Я не могу получить значение поля $field2 магическим методом __get. Конечно, я могу написать свой метод, но это будет уже не то. Передавать в $key параметр для выбора поля тоже странно.
Как в этом случае получить доступ к полю через геттер?
PS
Посмотрите, как в C# доступ к полю Age (которого нет) переадресуется на свойство Age (которое по сути разновидность метода) и начинает работать механизм сеттера и геттера в зависимости от того читаем ли мы поле или пишем в него значение.
Ответы (3 шт):
Автор решения: Владимир Клыков
→ Ссылка
<?php
define ('_EOL',"\r\n");
class MyClass
{
private $field1 = 1;
private $field2 = 2;
public function __get($key)
{
return $this->{$key};
}
}
$myClass = new MyClass();
echo $myClass->field1 ._EOL;
echo $myClass->field2 ._EOL;
Output:
1
2
Автор решения: NaClnik
→ Ссылка
В PHP нет свойств, как в C#. Вместо этого пишут отдельные методы:
<?php
class MyClass
{
private $field1 = 0;
private $field2;
public function getField1() {
return $this->field1;
}
public function setFiled1($field1) {
$this->field1 = $field1;
}
public function getField2() {
return $this->field2;
}
public function setFiled2($field2) {
$this->field2 = $field2;
}
}
Магические методы здесь работают не так, как свойства в C#:
class MyClass
{
private $field1 = 0;
private $field2;
public function __get($key)
{
// Здесь $key будет равно field3.
return $this->field1;
}
}
$instance = new MyClass();
$instance->field3; // В данном случае field3 передаётся аргументом в магический метод __get
Автор решения: Алексей Шиманский
→ Ссылка
Видимо надо что-то такое?
class MyClass {
private $field1 = 1;
private $field2 = 2;
public function __get($key) {
$getMethod = 'get' . $key;
return $this->{$getMethod}();
}
private function getField1() {
return 111;
}
}
$myClass = new MyClass();
echo $myClass->field1;