ООП для начинающих PHP. Магические методы get,set,clone

preview_player
Показать описание
Как учить ООП? Очень просто, сегодня мы рассмотрим магические методы __get,__set,__clone. ООП для начинающих PHP стоит рассмотреть весь плейлист на нашем канале.
========================================================
И не пропускай новые видео!!!
========================================================
ПЛЕЙ-ЛИСТЫ МОЕГО КАНАЛА:
========================================================

========================================================
Рекомендации по теме
Комментарии
Автор

Для тех, кто не понял, это все просто функции, вызываемые при клонировании объекта (со стороны клонированного), при получении или задании свойства класса (включая приватные). Они просто вызываются, за исключением __set(), которое по умолчанию еще и возвращает не новое значение свойства, а именно переданное значение $value.
Для того, чтобы метод __get возвращал именно значение, в него нужно добавить return $this->$name;
Для того, чтобы __set именно задавал значение нужному св-ву, нужно в него добавить $this->$name = $value;

PIVKOooo
Автор

Чем дальше, тем все хуже и хуже... о чем урок?... Это для новичков или для тех, кто "уже изучал какие то языки программирования и знаком со схожими понятиями"!?!?!? ЗАЧЕМ все это нужно? Что эти методы, для чего они, чем отличаются от обычных методов. Из подобного объяснения в уроке, им больше подходит не "магические", а абстрактные, ибо не понятно о чем они... Подитожим: есть магические методы (get, set и clone). Они пишутся с двойного подчеркивания. Далее, просто повторите код за мной, и ... это все, что я хотел рассказать в этом уроке. Подписывайтесь и оставляйте вопросы в комментах (зачем то).

АндрейВаняев-ть
Автор

На всякий случай пояснение про клонирование, если просто $user2 = $user1, фактически мы не клонируем объект, а передаем лишь ссылку на него, т.е. обе переменные будут ссылаться на один и тот же объект и изменение его свойств через любую из переменных даст изменение в другой т.к. фактически они ссылаются на один и тот же объект, применяя же клонирование, мы практически создаем копию объекта и имеем 2 разных объекта, изменение свойств одного не приводит к изменению свойств другого

Игорь-ефо
Автор

более наглядным было бы:
function __clone()
{
$this->id++;
}
тогда каждый следующий клон получает не обнуление, а увеличение айди на единицу

lvivduncan
Автор

эм так как же работаю магические методы get и set я неуслышал в видео

thecake
Автор

Вообще ничего не понял. Ноль объяснений. Такая сухая подача информации я в шоке. Всё равно что документацию читать. Пойду её и почитаю...

myjam
Автор

зачем {{ private $number = 1 }} ??? причем оно тут?

kanekabal
Автор

Примеры бы на живых примерах в следующих видео увидеть. Хоть самые простые но полезные

freeoratory
Автор

Хороший урок, просто возможно не хватает объяснения на живом более используемом примере из жизни.

UkraineBoy
Автор

Не понятно - echo $obj->number выводит слово "you get number", Нафига его выводить, если мне нужно Значение этой переменной, а не слово, которое я и так знаю. Сеттер тоже выводит что я якобы сделал, но значение то не меняется, это показывает var_dump($obj);

maximilianno
Автор

1-53 Непонял, а каким образом выводится, если нет вызова ?

Таксист-Эволюционер
Автор

я не понял, потом понял из других источников:

<?php
class Abc {
private $a = 123;

public function __get($a) {
echo "You get ";
return $this->$a;
}

public function __set($a, $val) {
echo "You set {$a} to ";
$this->$a=$value;
}
}
$obj1 = new Abc();

echo $obj1->a;
echo $obj1->a = 312;

?>

SiegeMechanic
Автор

5.47 Ржу не могу. "Это в принципе не самый удачный пример с использование имени и города но в принципе для понимания как работает ..." . Так в чем пример не удачен в имени Алексей или в городе Киев . Я думаю не стоит бояться не того, не другого магические методы __get, __set, __clone мы поймем. Ждем продолжения и побольше примеров на практике !

АлексейТерлецкий-ул
Автор

Я ток одного не понял, зачем создавать private свойства, а потом еще гетер и сетер, из-за которых работа с этими свойствами никак не отличается от public? Вроде как с помощью private мы наоборот закрываем доступ, а __set и __get, на случай если мы передумаем, или что? 0_о

enottom
Автор

Отличные уроки, никакой воды, только самое нужное и все в тему. Респект автору!

AlesisAlexis
Автор

Я так реализовал, немного понятней
class GetSet {
private $number = 1;
private $age = 35;



public function __get($name) {
echo 'Yuu get ' . $this->$name . '<br>';
}

public function __set($name, $val) {
$this->$name = $val;
echo 'You set ' . $name .' to ' . $val .'<br>';
}
}

ДмитрийТарадай-сж
Автор

СПАСИБО!ПОНЯЛ!!!!АВТОР РЕСПЕКТ ТЫ ЛУЧШИЙ !!!

ПРИМЕР __set() __get()
<?PHP
class GETSET{
private $number = 1;

public function __get($name){
echo "YOU GET$name";
}
public function __set($name, $value){
echo "YOU GET$name -> $value";
}

}

$obj = new GETSET;

$obj -> __get("Vlad<br>");
$obj -> __set("Vlad", "SuperVLad");

?>

vladshcherbachenia
Автор

Если делать делай на совесть плиз.Обьясняй все лучше розжуй и обьясни где мы будем ето использовать

lodehosar
Автор

Цитата "Если переменная класса закрыта, то обращение к ней возможно только через открытые методы

ИльиныхИван
Автор

public function __get($name){
echo "You get {$this->$name}"; Так буде цікавіше
}

webmaker_studio