Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.64/25: Рейтинг темы: голосов - 25, средняя оценка - 4.64
2 / 2 / 0
Регистрация: 20.12.2012
Сообщений: 52

MVC - правильное использование наследования

29.08.2013, 20:11. Показов 5750. Ответов 59
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всім добрий день. Я намагаюсь розібратись з MVC і написати свій "велосипад"(фреймворк) - чисто для досвіду і щоб зрозуміти як це все працює. Знайшов в інтернеті статтю с файлами по цій темі(файли прикріпив).
Насколько я понял, из этой статьи, все контроллеры наследуются от базового контроллера.
Здесь и вопрос - что именно они должны наследовать. В файлах которые я прикрепил находится такой код:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
//любой контролер будет наследоваться от базового класса
 class Lib_BaseController 
 {
     private $member; 
        
     function __set($name,$val)
     {
         $this->member[$name] = $val;
     }
 
     function __get($name)
     {
          return $this->member; 
     }                   
 }
Но я не совсем понимаю что делают __set и __get.
Документацию по ним читал, но не совсем понимаю что они делают именно в этом примере.
Вложения
Тип файла: zip lesson1.zip (44.0 Кб, 4 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.08.2013, 20:11
Ответы с готовыми решениями:

Правильное использование namespace
Есть проект на чистом PHP, по долгу стажировки так надо, для лучшего понимания. Проект я сделал без пространств имён, а для...

Сеттеры в PHP. Правильное использование
Новая статья: http://www.phpinfo.su/articles/theory/settery_v_php_pravilnoe_ispolzovanie.html жду критики )

Правильное использование пространства имен
Здравствуйте. Подскажите про пространство имен. К примеру у меня есть класс One, который относится к пространству имен A. Вопрос...

59
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
02.09.2013, 21:56
Студворк — интернет-сервис помощи студентам
0
 Аватар для nubo
113 / 70 / 2
Регистрация: 31.07.2010
Сообщений: 337
02.09.2013, 22:10
Цитата Сообщение от KOPOJI Посмотреть сообщение
Почему я получаю ответ метода, а не свойства, а что в этом свойстве я так и не узнаю?
Это не вы обращаетесь к методу. А интерпретатор. Магия (шайтан-машина). Вот зпустите этот код на 4-й ветке, где магии нету, чей ответ получите?
Вы в коде обращаетесь к свойству. Что дальше происходит - дело десятое. Никому не видное. Я допустим открываю доку и вижу
PHP
1
2
/**
*@access private
И тут же, не взирая на это, легким движением руки начинаю задавать ему значение снаружи класса. Это не нарушение разве?

Даже специально сделал свойство закрытым, а не защищенным.
Итак, что мы имеем:
1. Свойство закрытое? Да.
2. Метод публичный? Да.
3. Публичный метод обращается к закрытому методу? Да.
4. Противоречит это принципам инкапсуляции? Нет.
Все точь-в-точь по вашей же фразе.
Не верное рассуждение. Пропустили самую значимую строку.
1. Свойство закрытое? Да.
2. Метод публичный? Да.
3. Обращаемся к закрытому свойству? Да. Вот тут и косяк, нарушающий инкапсуляцию.
4. Публичный метод обращается к закрытому методу? Да.
5. Противоречит это принципам инкапсуляции? Да.
Цитата Сообщение от KOPOJI Посмотреть сообщение
поподробнее насчет этого. А то я что-то пропустил, когда вдруг неизвестные методы стали открытыми, да еще и по умолчанию.
Какие неизвестные? Любой метод по умолчанию публичный.
Это для обратной совместимости сделано.

Цитата Сообщение от KOPOJI Посмотреть сообщение
В отличии от точки?
От ваших принципов. Надоедает повторяться.
Цитата Сообщение от KOPOJI Посмотреть сообщение
Вы что-то прям уж слишком серьезны.. Это была шутка, печально, что вы не поняли..
Вы как то уж больно непонятно шутите... Обозночйте тогда хотя бы словом "лопата".
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
02.09.2013, 22:23
Цитата Сообщение от nubo Посмотреть сообщение
Вот зпустите этот код на 4-й ветке, где магии нету, чей ответ получите?
я могу запустить и на 5-й ветке, достаточно заменить private/protected на public/var. Что дальше?
Цитата Сообщение от nubo Посмотреть сообщение
И тут же, не взирая на это, легким движением руки начинаю задавать ему значение снаружи класса. Это не нарушение разве?
Что-то изменится при отсутствии сеттера? Правильно, вы тем же самым легким движением руки будете пробовать сделать тоже самое. Только при использовании сеттера вы имеете возможность контролировать данный процесс, при неиспользовании - в результате вы получите только один возможный ответ - сообщение интерпретатора об ошибке.
Цитата Сообщение от nubo Посмотреть сообщение
Обращаемся к закрытому свойству? Да. Вот тут и косяк, нарушающий инкапсуляцию.
Вы изменили мою фразу на неверную. Во-первых, мы не обращаемся к закрытому свойству, а пытаемся к нему обратиться. Что, кстати, достаточно хорошо показано в примере выше, стоит его только запустить. Во-вторых, то, что происходит далее - зависит от описания геттера, и это все ни в коей мере не нарушает принцип инкапсуляции.
Цитата Сообщение от nubo Посмотреть сообщение
Какие неизвестные?
Цитата Сообщение от nubo Посмотреть сообщение
Даже те, которых нет явно, по умолчанию публичны
Вы не помните, что вы же сами написали?
Цитата Сообщение от nubo Посмотреть сообщение
От ваших принципов. Надоедает повторяться.
А, да, экстрасенс, знающий мои принципы. Насчет повторений - так вы и не повторяете, а путаетесь. Сначала говорите одно, а затем другое.. Это я за вами повторяю, чтобы вы увидели это, но вы в упор этого не замечаете (или делаете вид, что не замечаете).
Цитата Сообщение от nubo Посмотреть сообщение
Вы как то уж больно непонятно шутите...
Ну если бы вы были знакомы с человеком по ссылке, то поняли.
Цитата Сообщение от nubo Посмотреть сообщение
Обозночйте тогда хотя бы словом "лопата".
Ок.
0
 Аватар для nubo
113 / 70 / 2
Регистрация: 31.07.2010
Сообщений: 337
02.09.2013, 23:05
Цитата Сообщение от KOPOJI Посмотреть сообщение
Что-то изменится при отсутствии сеттера? Правильно, вы тем же самым легким движением руки будете пробовать сделать тоже самое.
С какой стати? Это сарказм был, я тоже не удачно шучу сегодня. Если разработчик объявил свойство приватным, в мыслях не может возникнуть его дергать снаружи. В той статье кстати все свойства защищенные. Вы не поняли почему? Да потому что нельзя к ним обращаться напрямую. Нельзя. Только через сеттер-геттер. Только методом. Что бы и в мыслях не было.

А вы допускаете такую вольность, хотя в документации класса (а объявление доступов к свойствам в шапке, это априори документация класса и есть, я не говорю уже о PHPDOC) черным по русскому написано - НИЗЯ!

И пытаетесь после этого рассуждать о незыблимости принципов инкапсуляции.

Цитата Сообщение от KOPOJI Посмотреть сообщение
Вы не помните, что вы же сами написали?
А где тут про "неизвестные". Неопределенные явно, это несколько другое. Это перегруженные допустим.

Цитата Сообщение от KOPOJI Посмотреть сообщение
А, да, экстрасенс, знающий мои принципы.
Для этого не нужна экстросенсорика. Вы их сами громогласно декларируете. Что обращаться можно ко всему и вся, не взирая на установленные доступы.
Цитата Сообщение от KOPOJI Посмотреть сообщение
Насчет повторений - так вы и не повторяете, а путаетесь. Сначала говорите одно, а затем другое.. Это я за вами повторяю, чтобы вы увидели это, но вы в упор этого не замечаете (или делаете вид, что не замечаете).
Вы просто пытаетесь выкрутиться, подменяя понятия и передергивая мои слова.

Мой принцип прост. Всего навсего несколько слов. Это кстати главное правило техники безопасности. А вы можете дальше крутиться ужем, ставить эксперементы и плевать на правила. Давно уже понятно, что вам нечем крыть, но страшно потерять марку всезнайки. Успокойтесь, ни кто на вашу девственность не посягает.
Миниатюры
MVC - правильное использование наследования  
0
 Аватар для nubo
113 / 70 / 2
Регистрация: 31.07.2010
Сообщений: 337
02.09.2013, 23:11
Ах, да. Оставляю за вами право последнего слова. Тема действительно себя исчерпала.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
02.09.2013, 23:24
Цитата Сообщение от nubo Посмотреть сообщение
И пытаетесь после этого рассуждать о незыблимости принципов инкапсуляции.
после чего, этого-то? Где нарушена незыблимость принципов инкапсуляции? Мы имеем прямой доступ к свойству извне? Нет. Следовательно, никакие принципы никакой инкапсуляции НЕ нарушается. Использование метода вида $a->getName() от простого $a->name в данном случае не отличается практически ничем. Да, не так понятно и читабельность кода падает. Но я об этом уже говорил. Зато короче и плюс возможность подстановки в строку напрямую без использования всяких операторных скобок.
Цитата Сообщение от nubo Посмотреть сообщение
В той статье кстати все свойства защищенные. Вы не поняли почему? Да потому что нельзя к ним обращаться напрямую.
Сколько раз еще повторить написанное выше? Мы не обращаемся к свойству, а лишь пытаемся обратиться. И хоть вы лопните там, но, если геттер возвращает другое значение, то вы не получите никакого доступа к вашему свойству. Из чего можно сделать простой вывод - попытка обратиться к свойству и обращение к свойству - разные вещи. А раз прямого доступа к свойству извне класса нет - следовательно, никаких правил и принципов не нарушено.
Цитата Сообщение от nubo Посмотреть сообщение
Для этого не нужна экстросенсорика. Вы их сами громогласно декларируете. Что обращаться можно ко всему и вся, не взирая на установленные доступы.
Еще раз (уже третий только в этом сообщении, может, так дойдет?). Не обращаться, а попытаться обратиться. Если для вас понятия "съесть яблоко" и "представить, как вы едите яблоко" абсолютно равнозначны, то все ясно.
Цитата Сообщение от nubo Посмотреть сообщение
Вы просто пытаетесь выкрутиться, подменяя понятия и передергивая мои слова.
С чего мне выкручиваться? Вам в четвертый раз за одно сообщение повторить, что обращение и попытка - это разные вещи?
Цитата Сообщение от nubo Посмотреть сообщение
Мой принцип прост. Всего навсего несколько слов
Что-то не похоже на "несколько слов". Ваш принцип, исходя из ваших сообщений в нескольких темах - "1. я всегда прав. 2. Если я не прав - смотреть пункт 1".
Цитата Сообщение от nubo Посмотреть сообщение
А вы можете дальше крутиться ужем, ставить эксперементы и плевать на правила
Эти эксперименты - только специально для вас, для вашей
Цитата Сообщение от nubo Посмотреть сообщение
марку всезнайки
и для
Цитата Сообщение от nubo Посмотреть сообщение
вашу девственность

Не по теме:

как всегда, ожидаемо, что. Нечего ответить - вперед за оскорблениями. В таком случае, позволю себе поделиться ссылкой на правила форума. Я нигде не оскорблял вас, лишь пытался объяснить, что вы не правы с моей точки зрения.

0
 Аватар для nubo
113 / 70 / 2
Регистрация: 31.07.2010
Сообщений: 337
02.09.2013, 23:40
Не удержусь все таки. Теперь уже точно все.
Цитата Сообщение от KOPOJI Посмотреть сообщение
Не обращаться, а попытаться обратиться. Если для вас понятия "съесть яблоко" и "представить, как вы едите яблоко" абсолютно равнозначны, то все ясно.
Если вы попытаетесь срезать провод под напряжением, не взирая на табличку, и вас треснет током, тоже скажите потом - я же не срезал, я только попытался! Или допустим попытаетесь трахнуть девочку, а она скажет - нельзя? Вы магический сеттер изобретете, клафелин какой-нибудь? А потом как ментам объясните - я же только пытался!!!

Я тоже в сотый раз повторяю - если свойство объявлено недоступным из вне, даже пытаться нельзя. Как минимум получите ошибку, как максимум можете получить логическую ошибку, что гораздо страшнее. Ну и уж нарушение тут точно на лицо. Если сказано - нельзя, значит нельзя. Даже пытаться.
А если логика строится на принципах "если нельзя, но слишком хочется", то это не логика, а кистень.

Все, спокойной ночи. Простите, если задел за живое. Был трудный день, еще и до вас не доходит элементарщины. Ничего личного, это просто общие фразы, обычно применяемые на форумах. Постараюсь изучить правила. Не по принципу фреймворка, обещаю.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
02.09.2013, 23:50
Цитата Сообщение от nubo Посмотреть сообщение
Если вы попытаетесь срезать провод под напряжением, не взирая на табличку, и вас треснет током, тоже скажите потом - я же не срезал, я только попытался!
Если я попытаюсь срезать провод под напряжением (кстати, под каким? 220 меня лупило, ничего страшного. Судя по наличию таблички - 380? Или больше? ), то вам, скорее всего, некому будет ответить. И опять же, пример работает против вас же. Вы не используете геттеры. Пытаетесь обратиться к закрытому свойству (срезать провод под напряжением). Вам интерпретатор выдает ошибку (током вас долбанет). Профит.
Использование геттера позволяет исправить это - поставить часового, к примеру. Который увидит, что ты пытаешься срезать провод, и сделает что-то. Что именно - зависит от его задачи (реализации). Это может быть и кусок подобного провода. Может и дать по рукам. Может отключить счетчик. Что здесь сложного для понимания и где нарушается принцип инкапсуляции?

Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от nubo Посмотреть сообщение
Постараюсь изучить правила
ну я не сомневался, в отношении правил все знают разницу между "учить" и "изучить".. ЛОПАТА

0
694 / 534 / 40
Регистрация: 22.06.2009
Сообщений: 1,293
02.09.2013, 23:54
Я нить разговора потерял уже.

Цитата Сообщение от nubo Посмотреть сообщение
Если разработчик объявил свойство приватным, в мыслях не может возникнуть его дергать снаружи.
Итого, ответьте на несколько вопросов:
1. Если свойство будет использоваться снаружи класса, то его всегда нужно делать публичным?
2. В каком случае нужно делать сеттеры и геттеры для свойства? Или вообще никогда их не делать?
3. __set() и __get() пользоваться вообще никогда нельзя или можно в каких то случаях?

По этим трем вопросам я так и не понял вашу позицию.

Позицию KOPOJI по этим же вопросам я понял, может и неправильно, но понял. Он говорит о том, что
1. Свойство делать публичным нужно в очень редких случаях.
2. Стараться пользоваться сеттерами и геттерами чаще, потому что они позволяют избавиться от ошибок с неверными данными в свойстве.
3. При необходимости, если так решил программист можно пользоваться __set() и __get()

Озвучьте пожалуйста вашу позицию.
1
03.09.2013, 00:04

Не по теме:

я его позицию тоже так и не понял. Сначала одно, затем другое..
Только в моей "позиции" - пункт 2: не обязательно "чаще". Я вообще предпочитаю обходиться как-раз таки без них (или почти без них), передавая значения массивом. В основном, в принципе, изменение их извне и не требуется, это достаточно редкая потребность. Ну разве что нечто наподобие массового безопасного присваивание атрибутов, например, как в "поросячьем Yii" (с)

PHP
1
$model->attributes = $_POST['данные'];
и простенький сеттер вида
PHP
1
2
3
foreach($values as $k=>$v)
    if(property_exists($this, $k))
        $this->$k = $v; //разумеется со всякими проверками и т.п.
Поэтому пункт 2, скорее, как и пункт 3 - если так решил программист, т.к. я не утверждал, что это единственно верное решение, а лишь говорил, что ничего плохого при использовании с умом от этого не будет.

0
 Аватар для nubo
113 / 70 / 2
Регистрация: 31.07.2010
Сообщений: 337
03.09.2013, 08:01
Цитата Сообщение от Alorian Посмотреть сообщение
Итого, ответьте на несколько вопросов:
1. Если свойство будет использоваться снаружи класса, то его всегда нужно делать публичным?
2. В каком случае нужно делать сеттеры и геттеры для свойства? Или вообще никогда их не делать?
3. __set() и __get() пользоваться вообще никогда нельзя или можно в каких то случаях?
Моя позиция.
1. Да. Однозначно. Только тут нужно понимать разницу между самим свойством и его значением. Если требуется именно обращение к свойству снаружи, оно должно быть публичным. Если требуется его текущее значение (получить или изменить), то само свойство может быть и с закрытым доступом, но если оно закрыто, обращаться (и даже пытаться) к нему напрямую нельзя. Только через публичный геттер, сеттер. Не магический, это важно.

Иначе это нарушает принципы инкапсуляции:
Инкапсуляция — механизм языка программирования, ограничивающий доступ к составляющим объект компонентам (методам и свойствам), делает их приватными, то есть доступными только внутри объекта. Важно понимать, что к инкапсулированной переменной можно обратиться при написании реализации класса, но при его использовании обращение к ней невозможно
2. Тут нужно уяснить разницу между магическими сеттерами/геттерами и пользовательскими. Магические (__set() и __get()) использовать для перегрузки закрытых или защищенных свойств использовать крайне не желательно (см п 1). Есть исключения, которые только подтверждают правило. Допустим для исправления неверно спроектированного приложения, когда сложно внести изменения в большой код. Но такое решение есть суть костыль.
Костыль — средство добавления недостающей функциональности или исправления серьёзных дыр без должного редизайна системы. Каждый костыль затрудняет дальнейшее развитие.
(с) Лурка (ссылку не могу дать, модератор будит жысток)
В PHP и без того полно костылей, не стоит добвлять своих.

Еще есть способ хранения перегруженных свойств в массиве, но это тоже костыль.

Пользовательские сеттеры и геттеры указывают на действие перегрузки явно, это не противоречит принципам инкапсуляции. Так как мы не сами пытаемся обратиться к закрытому свойству, а пользуемся предоставленным классом публичным интерфейсом. В коде так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php
// Это плохо
class A 
{
    private $name; 
    
    function __set($property, $value)
    {
        $this->$property = $value;
    }
    
    function __get($property)
    {
        return $this->$property;
    }    
 
}
 
    $a = new A;
    // Нарушение принципа инкапсуляции, обращение к закрытому свойству
    $a->name = 'Вася Пупкин';
    echo $a->name;
//////////////////////////////////////////    
// Это нормально
class B 
{
    private $name; 
    
    function setName($value)
    {
        $this->name = $value;
    }
    
    function getName()
    {
        return $this->name;
    }
}
 
    $b = new B;
    //Ошибка, свойство закрыто 
    //$b->name = 'Вася Пупкин';
    //echo $b->name;
    
    // А так класс нам разрешает изменить свойство name, но никакое другое.
    $b->setName('Вася Пупкин'); 
    // Ну или получить его значение. Только его и только методом.
    echo $b->getName();
    // Это не нарушает принципов инкпсуляции.
Чтобы не писать метод на каждое свойство, можно использовть универсальный сеттер/геттер
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
 
class B 
{
    private $name; 
    
    function setProperty($property, $value)
    {
        $this->$property = $value;
    }
    
    function getProperty($property)
    {
        return $this->$property;
    }
}
 
    $b = new B;
    //Ошибка, свойство закрыто 
    //$b->name = 'Вася Пупкин';
    //echo $b->name;
    
    // Это тоже не нарушает принципов инкпсуляции.
    $b->setProperty('name', 'Вася Пупкин'); 
    echo $b->getProperty('name');
или воспользоваться перегрузкой методов с помощью __call(), что красивее. Там выше есть ссылка на подробную статью, которую любезно предоставил KOPOJI, сам в ней толком не разобравшись.

3. Использовать __set() или __get() можно для других нужд. Допустим для того же предупреждения об отсутствии свойств в классе. Либо для передачи неопределенного свойства в какой-то специально для этого предназначенный метод или класс. Тут важно знать, что свойство, определяемое динамически, имеет публичный доступ.

Можно еще придумать применения, все зависит от фантазии. Главное не нарушать законов.
Уголовный кодекс нужно чтить (С) О.Бендер.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
03.09.2013, 09:15
Цитата Сообщение от nubo Посмотреть сообщение
которую любезно предоставил KOPOJI, сам в ней толком не разобравшись.
Конечно, откуда мне. Только вот ведь незадача, вы тут говорили, что магические сеттеры/геттеры и иже с ним - от лукавого.. Дать ссыль на мануал про магические методы?
0
 Аватар для nubo
113 / 70 / 2
Регистрация: 31.07.2010
Сообщений: 337
03.09.2013, 09:48
Не выдергивйте фраз из контекста пожалуйста. Мы обсуждали магические сеттеры/геттеры для перегрузки защищенных или закрытых свойств. Тут я от своих слов не отказываюсь, от лукавого конечно. Для публичных - пожалуйста. Только в этом нет смысла.

В PHP много интересных вещей, которые вроде как работают и описаны в доке, но пользоваться ими моветон. Допустим GOTO, eval, модификатор "е", global, те же незабвенные магические(!) кавычки... Я не говорю, что использовать их табу, но любое их применение на грани (если не явно, как в вших примерах) костыльности. А это не гут, этого следует избегать.

Цитата Сообщение от KOPOJI Посмотреть сообщение
Дать ссыль на мануал про магические методы?
Угу, дайте. За одно сами прочитайте первую строчку
Перегрузка в PHP означает возможность динамически "создавать" свойства и методы.
Не "переопределять", как у вас.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
03.09.2013, 10:15
Цитата Сообщение от nubo Посмотреть сообщение
Мы обсуждали магические сеттеры/геттеры для перегрузки защищенных или закрытых свойств. Тут я от своих слов не отказываюсь, от лукавого конечно. Для публичных - пожалуйста.
Что вы за бред гоните? Вам еще раз повторить?
Цитата Сообщение от KOPOJI Посмотреть сообщение
попробуйте сначала поймать через геттер или сеттер существующее открытое свойство.
Цитата Сообщение от nubo Посмотреть сообщение
В PHP много интересных вещей, которые вроде как работают и описаны в доке, но пользоваться ими моветон. Допустим GOTO, eval, модификатор "е", global, те же незабвенные магические(!) кавычки...
метками, глобальными и eval-ом пользоваться не рекомендуется (или как можно меньше пользоваться) во всех языках, пых тут ни при чем. Магические кавычки - просто неудачная попытка защитить учеников столь известных мастеров а-ля Попов (кстати, вы не его протеже? ЛОПАТА).
Цитата Сообщение от nubo Посмотреть сообщение
За одно сами прочитайте первую строчку
Ну, как я и говорил, с вами все ясно:
Цитата Сообщение от KOPOJI Посмотреть сообщение
Позор разрабам, придумавшие никому ненужные геттеры и сеттеры
Только надо теперь туда еще добавить, чтобы выглядело так:
Цитата Сообщение от KOPOJI Посмотреть сообщение
Позор разрабам, придумавшие никому ненужные геттеры и сеттеры, да еще и зачем-то запихавшие туда возможность перехвата доступа к закрытым/защищенным свойствам, да еще и описавшие это в документации
Цитата Сообщение от nubo Посмотреть сообщение
Я не говорю, что использовать их табу, но любое их применение на грани (если не явно, как в вших примерах) костыльности. А это не гут, этого следует избегать.
Ну, раз вы так любите докапываться до примеров, то я могу спокойно сказать: ваш второй пример - УГ, практически ничем не отличающийся от реализации с помощью геттера/сеттера. Нет никакой проверки на существование поля вообще (вы же несколько раз про это говорили, не так ли?) ни при записи значения, ни при чтении. Это во-первых. Во-вторых, вы даже не понимаете, что такое вообще перегрузка методов:
Цитата Сообщение от nubo Посмотреть сообщение
или воспользоваться перегрузкой методов с помощью __call(), что красивее
Ну какая нафиг __call(), если вы и так опишете методы getName и т.д.? Вы что, с Луны свалились? ЛОПАТА
Просто чтобы было? Я уже говорил, и мое мнение не изменилось:
1. Вы просто тролль (имхо, несостоявшийся)
2. Вы не понимаете много относительно надобности того или иного (использование магических методов, фреймворков), но считаете, что, если вы не понимаете этого, значит это говнокод и это никому не нужно.
3. Вы считаете, что вы всегда правы, независимо от того, что вам говорят все вокруг
0
 Аватар для nubo
113 / 70 / 2
Регистрация: 31.07.2010
Сообщений: 337
03.09.2013, 10:38
Цитата Сообщение от KOPOJI Посмотреть сообщение
Что вы за бред гоните? Вам еще раз повторить?
Сообщение от KOPOJI
попробуйте сначала поймать через геттер или сеттер существующее открытое свойство.
Причем тут существующее? Вы не торопитесь, не хватйте верхушек. Вы пытайтесь вникнуть сначала. Я говорил о публичных. И еще даже специально ниже акцентировался:
Цитата Сообщение от nubo Посмотреть сообщение
Тут важно знать, что свойство, определяемое динамически, имеет публичный доступ.
Хотя чего я... Нет смысла метать бисер. Если вы начали рвать фразы из контекста, да еще и приписывать мне ваши домыслы:
Цитата Сообщение от KOPOJI Посмотреть сообщение
Позор разрабам, придумавшие никому ненужные геттеры и сеттеры, да еще и зачем-то запихавшие туда возможность перехвата доступа к закрытым/защищенным свойствам, да еще и описавшие это в документации
смысла общаться больше нет.

Я свою позицию обозначил четко и вполне доступно. Если у кого-то еще возникут вопросы, отвечу. Продолжать бессмыслицу не имею возможности.

Цитата Сообщение от KOPOJI Посмотреть сообщение
1. Вы просто тролль (имхо, несостоявшийся)
А как же правила??? Или вам самому на них плевать, как и на инкапсуляцию? (Вопрос риторический)

3. Вы считаете, что вы всегда правы, независимо от того, что вам говорят все вокруг
Все?? А сколько вас? Я думал, что под ником KOPOJI сидит один человек...
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
03.09.2013, 10:59
Цитата Сообщение от nubo Посмотреть сообщение
Если вы начали рвать фразы из контекста, да еще и приписывать мне ваши домыслы:
это ваши домыслы, и фразы рвете из контекста вы, на протяжении всей темы. А все, на что не способны ответить - попросту игнорируете.
Цитата Сообщение от nubo Посмотреть сообщение
Причем тут существующее?
Я уже несколько раз сказал, при чем. Повторяться больше не имею желания - хотите узнать, перечитайте тему
Цитата Сообщение от nubo Посмотреть сообщение
Я свою позицию обозначил четко и вполне доступно
О да. Настолько четко и доступно, что, спустя 5 страниц у вас спрашивают про эту "четко и вполне доступно обозначенную позицию".
Цитата Сообщение от nubo Посмотреть сообщение
А как же правила?
Я не вижу здесь ничего оскорбительного. Если для вас это оскорбительно - приношу свои извинения.
Цитата Сообщение от nubo Посмотреть сообщение
Все?? А сколько вас? Я думал, что под ником KOPOJI сидит один человек...
Ну-ну, будет. Я говорил не только про эту тему. Кстати, это разве не попытка троллинга?

Добавлено через 3 минуты
Цитата Сообщение от nubo Посмотреть сообщение
как и на инкапсуляцию?
" - Дружок, хочешь расскажу тебе сказку про белого бычка? - Хочу
- Дружок, хочешь расскажу тебе сказку про белого бычка? - Хочу!
- Дружок, хочешь расскажу тебе сказку про белого бычка? - Хочу!!
- Дружок, хочешь расскажу тебе сказку про белого бычка? - Хочу!!!"
Бесполезно, как со стенкой, ей-Богу..
0
 Аватар для nubo
113 / 70 / 2
Регистрация: 31.07.2010
Сообщений: 337
03.09.2013, 11:03
Свою позицию я резюмировал здесь. Там есть и про инкапсуляцию, и про доступные свойства, и про должное применение магических сеттеров. Кому нужно, прочитают. Я не для вас писал, а по просьбе Firefox__. С вами давно все понятно. Не напрягайтесь больше.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
03.09.2013, 11:07
Цитата Сообщение от nubo Посмотреть сообщение
а по просьбе Firefox__
да, я уже замечал, что вы зачастую не видите явного. Даже тут, не видите, кто просил.
Цитата Сообщение от nubo Посмотреть сообщение
С вами давно все понятно
Ну так, вы же экстрасенс, вы все про всех уже давно знаете.
Цитата Сообщение от nubo Посмотреть сообщение
Не напрягайтесь больше.
Да я и не напрягался. В отличии от вас..
0
 Аватар для nubo
113 / 70 / 2
Регистрация: 31.07.2010
Сообщений: 337
03.09.2013, 11:14
Цитата Сообщение от KOPOJI Посмотреть сообщение
да, я уже замечал, что вы зачастую не видите явного. Даже тут, не видите, кто просил.
Это кстати совсем не явно. Это вам привычно, что стартовый пост висит на всех страницх. А я привык, что отвечаю на предыдущий пост. Это кстати в вашем духе, сделать не как у всех, все запутать и решить, что так удобно.

Alorian, конечно же. Прошу прощения. Хотя и ТС косвенно тоже касается, не так уж я и ошибся.

Цитата Сообщение от KOPOJI Посмотреть сообщение
Да я и не напрягался. В отличии от вас..
Да ладно... Бегать по постам, выдергивать фразы из контекста и приписывать мне всякие домыслы, это для вас не напряжение, это наверное удовольствие. Тогда кто из нас тролль получается?
Цитата Сообщение от KOPOJI Посмотреть сообщение
Я не вижу здесь ничего оскорбительного.
0
03.09.2013, 11:18

Не по теме:

Цитата Сообщение от nubo Посмотреть сообщение
Тогда кто из нас тролль получается?
Так я никогда и не отрицал, что я люблю потроллить :)

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.09.2013, 11:18

Правильное использование include (PHP)
Если в пользовательском классе используются еще и другие классы (каждый хранится в отдельном файле), то где правильно размещать...

Правильное использование своих библиотек в модели
Здравствуйте, есть самописная библиотека по решению матриц - Matrix Как мне лучше (правильнее) использовать ее в &quot;голой&quot;...

Правильное построение паттерна "MVC"
Здравствуйте, товарищи. Суть темы заключается в том, что нету конкретного понимания некоторых моментов при использовании паттерна MVC....

Правильное название классов MVC
Здравствуйте. Я новичок в MVC и сразу извиняюсь если вопрос задан не в правильной теме. На днях столкнулся с проблемой. При написании...

использование наследования
Преподаватель одолел не могу разобраться помогите пожалуйста. С# Теория В программах требуется описать базовый класс (возможно,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru