Чем дальше, тем все хуже и хуже... о чем урок?... Это для новичков или для тех, кто "уже изучал какие то языки программирования и знаком со схожими понятиями"!?!?!? ЗАЧЕМ все это нужно? Что эти методы, для чего они, чем отличаются от обычных методов. Из подобного объяснения в уроке, им больше подходит не "магические", а абстрактные, ибо не понятно о чем они... Подитожим: есть магические методы (get, set и clone). Они пишутся с двойного подчеркивания. Далее, просто повторите код за мной, и ... это все, что я хотел рассказать в этом уроке. Подписывайтесь и оставляйте вопросы в комментах (зачем то).
@JustinBieberXbox3604 жыл бұрын
я думал я один думаю что эти уроки отстой...
@PIVKOooo7 жыл бұрын
Для тех, кто не понял, это все просто функции, вызываемые при клонировании объекта (со стороны клонированного), при получении или задании свойства класса (включая приватные). Они просто вызываются, за исключением __set(), которое по умолчанию еще и возвращает не новое значение свойства, а именно переданное значение $value. Для того, чтобы метод __get возвращал именно значение, в него нужно добавить return $this->$name; Для того, чтобы __set именно задавал значение нужному св-ву, нужно в него добавить $this->$name = $value;
@UkraineBoy865 жыл бұрын
Спасибо за уточнение! Это немного смущало, теперь понял этот момент с присваиванием переменных.
@Игорь-е3ф9о5 жыл бұрын
На всякий случай пояснение про клонирование, если просто $user2 = $user1, фактически мы не клонируем объект, а передаем лишь ссылку на него, т.е. обе переменные будут ссылаться на один и тот же объект и изменение его свойств через любую из переменных даст изменение в другой т.к. фактически они ссылаются на один и тот же объект, применяя же клонирование, мы практически создаем копию объекта и имеем 2 разных объекта, изменение свойств одного не приводит к изменению свойств другого
@lvivduncan7 жыл бұрын
более наглядным было бы: function __clone() { $this->id++; } тогда каждый следующий клон получает не обнуление, а увеличение айди на единицу
@User-cvhuidghjv6 жыл бұрын
Только если будет клон клона, а если это будут клоны оригинального класса User, то у всех будет id=1.
@freeoratory72806 жыл бұрын
Примеры бы на живых примерах в следующих видео увидеть. Хоть самые простые но полезные
@myjam5057 жыл бұрын
Вообще ничего не понял. Ноль объяснений. Такая сухая подача информации я в шоке. Всё равно что документацию читать. Пойду её и почитаю...
@АндрейСтавицкий-ю3п4 жыл бұрын
Я тоже ничего не понял. И да, открыл документацию - там понятней объяснено для чего оно нужно)
@thecake11287 жыл бұрын
эм так как же работаю магические методы get и set я неуслышал в видео
@SuprunAlexey7 жыл бұрын
Может вы просто не до конца поняли. пересмотрите видео
@thecake11287 жыл бұрын
да не до конца понял смотрел 3 раза уже) прилось смотреть документацию после документации стало понятно , но вашь пример легкий , что весьма кстате , было проще понять
@thecake11287 жыл бұрын
и еще вопрос в set нужно обязательно указывать 2 параметр?
@vladshcherbachenia98037 жыл бұрын
@User-cvhuidghjv6 жыл бұрын
@@thecake1128 Обязательно, но это же магическая функция, сама вызывается, аргументы сами ставятся, можно просто не использовать второй параметр.
@kanekabal4165 жыл бұрын
зачем {{ private $number = 1 }} ??? причем оно тут?
@UkraineBoy865 жыл бұрын
Хороший урок, просто возможно не хватает объяснения на живом более используемом примере из жизни.
@АлексейТерлецкий-у8л7 жыл бұрын
5.47 Ржу не могу. "Это в принципе не самый удачный пример с использование имени и города но в принципе для понимания как работает ..." . Так в чем пример не удачен в имени Алексей или в городе Киев ))))))) . Я думаю не стоит бояться не того, не другого магические методы __get,__set,__clone мы поймем. Ждем продолжения и побольше примеров на практике !
@SuprunAlexey7 жыл бұрын
Не удачно в том моменте, что использовать в таком контексте как в примере вы вряд ли будете. Не в имени и городе дело)
@Таксист-Эволюционер6 жыл бұрын
1-53 Непонял , а каким образом выводится , если нет вызова ?
@AlesisAlexis6 жыл бұрын
Отличные уроки, никакой воды, только самое нужное и все в тему. Респект автору!
@rau1494 жыл бұрын
Круто
@user-maximilianno7 жыл бұрын
Не понятно - echo $obj->number выводит слово "you get number", Нафига его выводить, если мне нужно Значение этой переменной, а не слово, которое я и так знаю. Сеттер тоже выводит что я якобы сделал, но значение то не меняется, это показывает var_dump($obj);
@user-maximilianno7 жыл бұрын
короче вот так надо: public function __get($name){ return $this->$name; } public function __set($name, $val){ $this->$name = $val; }
@S1mpaaa2 жыл бұрын
про get и set вообще не понятно
@enottom20035 жыл бұрын
Я ток одного не понял, зачем создавать private свойства, а потом еще гетер и сетер, из-за которых работа с этими свойствами никак не отличается от public? Вроде как с помощью private мы наоборот закрываем доступ, а __set и __get, на случай если мы передумаем, или что? 0_о
@ДаниилСафронов-е8т5 жыл бұрын
Ну хотя бы для того что бы можно было проверить получаемые данные в том же сеттере if val>0 тогда записать это значение, а нет то записать другое или вообще ничего не записывать... В принципе это же можно сделать написав метод (или функцию), но тогда простым присвоить не отделаетесь и придется вызывать этот метод (функцию) и передавать в нее параметр.... Но объяснение работы гет (сет) здесь... это просто вынос мозга....
@webmaker_studio2 жыл бұрын
public function __get($name){ echo "You get {$this->$name}"; Так буде цікавіше }
@lodehosar96865 жыл бұрын
Если делать делай на совесть плиз.Обьясняй все лучше розжуй и обьясни где мы будем ето использовать
@ИльиныхИван Жыл бұрын
Цитата "Если переменная класса закрыта, то обращение к ней возможно только через открытые методы для того, что бы это выглядело как будто это открытая переменная используют методы GET & SET" . Вопрос: Нахера ее закрывали если к ней все равно потом обращаются? САм то понял че налепил? Вот как нужно объяснять kzbin.info/www/bejne/a5_TZImif7l7iMU
@SiegeMechanic3 жыл бұрын
я не понял,потом понял из других источников:
@ДмитрийТарадай-с3ж3 жыл бұрын
Я так реализовал, немного понятней class GetSet { private $number = 1; private $age = 35; public function __get($name) { echo 'Yuu get ' . $this->$name . ''; } public function __set($name, $val) { $this->$name = $val; echo 'You set ' . $name .' to ' . $val .''; } }
@arhit_082 жыл бұрын
объясните для непонятливых, откуда взялась $name, ее ведь нету в свойствах класса, и на что она ссылается не пойму
@racer0064 Жыл бұрын
@@arhit_08 это аргумент для метода, когда вызываем $obj-> number там где стоял $name, подставится $number
@vladshcherbachenia98037 жыл бұрын
СПАСИБО!ПОНЯЛ!!!!АВТОР РЕСПЕКТ ТЫ ЛУЧШИЙ !!! ПРИМЕР __set() __get()
@alexandershnaidman8188 Жыл бұрын
Совсем не понятно ...
@2972597 жыл бұрын
Уроки говно! Примеры без смысла! Сути совсем нет
@itdev46804 жыл бұрын
Слабо, очень слабо, объяснил по сути ничего не объяснив. Можно сказать что просто перечислил
@SuprunAlexey4 жыл бұрын
itdev ясно
@itdev46804 жыл бұрын
@@SuprunAlexey Ну ты это... не обижайся прям сильно) Просто если что-то делаешь - делай хорошо, или не делай
@artem_malashenko3 жыл бұрын
Метод клоун.
@2972597 жыл бұрын
Где полиморфизм в твоих уроках???
@enottom20035 жыл бұрын
Где ваш мозг, уважаемый человек (но это еще доказать нужно, кто знает какое животное там у монитора сидит)? Ты видел документацию? Она кстати на русском. Специально для таких как ты (намек на неспособность обучаться вообще чему либо, английскому в том числе). Бесят такие дегенераты, я бы просто банил. И чем тебе абстрактные классы и методы не полиморфизм? А, хотя стоп, беру свои слова обратно, я посмотрел твои видео, их там кстати очень много (одно)... Прости, ты просто образец того как нужно снимать видео, качественный звук, удобный просмотр, а также на твоем канале очень легко можно найти интересующее видео. Ты гуру, и ты заслуживаешь намногоо больше, чем 20 подписчиков (долго знакомых выпрашивал подписаться?). Курение убивает. И вас убьет. Надеюсь.
@АндрейИльин-д6ж5 жыл бұрын
а кто 33 дизлайк поставил?
@SuprunAlexey5 жыл бұрын
Не ты случайно?
@serhiy20206 жыл бұрын
намного понятней будет так: class MyClass { private $firstField; private $secondField; public function __get($property) { if (property_exists($this, $property)) { return $this->$property; } } public function __set($property, $value) { if (property_exists($this, $property)) { $this->$property = $value; } return $this; } }
@ИльиныхИван Жыл бұрын
ТИпа выебнулся? Чем твой высер отличается от его? Такая же хуета непонятная, только еще if-ов напихал...
@sergknurov43696 жыл бұрын
Уроки полный отстой, сути нет все как по мануалу, и чему они учат? Это просто примеры.