All streams
Search
Write a publication
Pull to refresh
44
0
sectus @sectus

User

Send message
> Переписать его было практически невозможно, т.к. он относится к ядру движка. Миллионы страниц Википедии могли полететь в один момент, если бы в каком-то месте нового кода произошла ошибка.

Довольно странный аргумент.

Статья не оформлена как перевод.

А где ссылка на сам парсер?
По-моему логичное поведение. Так СУБД приходилось не только парсить запрос, но ещё перед этим канонизировать — а это уже почти тоже самое что и парсинг.
Предлагаю прочитать про CSRF

P.S. Почему пост, а не вопрос?
> Сначала хотел удивиться, но потом увидел в твиттере
>>17 year old student

Что Вы хотели этим сказать?
В примерах не показано про $this, работает он в обработчиках?
Там берётся существующая(произвольная) функция и каррируется, и получается новая функция. При этом исходная функция не меняется и не знает, что ее каррировали.

Применительно к объектам вижу два пути. Каррируем метод объекта и получаем…
1.… новую функцию;
2.… новый объект с тем же интерфейсом плюс новый метод.

Оба случая должны оперировать произвольным объектом с произвольными методами. При чем так, чтобы ни объект, ни методы не знали о том как с ними обращаются.

В Вашем же подходе, чтобы каррировать метод объекта нужно вмешаться в иерархию наследования и изменить конструктор.
Не понял смысла Вашего подхода. Если у Вас есть возможность добавлять свои методы в класс, то зачем это делать таким способом? В чём выигрыш?
И так вот он класс с каррирующим методом, который и реализует (простите за каламбур) частичное использование метода класса. При этом, создается псевдометод, который и вызывается (опять скаламбурил) магическим методом __call():


Поясните, пожалуйста, в чём здесь заключаются каламбуры?
1. Это диагноз, который называется «echo быстрее, чем print».
2. extract безопаснее Вашего первого способа, там можно указать некоторые настройки. Что касается объектов. Тут нельзя будет использовать extract. Опять же можно всяким мусором заполнить объект. И если все объекты для конфигурирования будут показывать свои свойства всем, то, скажем так, это открывает слишком много секретов, которые должны быть скрыты. Не будет интерфейсов, потому что все свойства будут открыты. Передал один объект он заполнился, передал другой объект, он точно так же заполнился и даже не поперхнулся.
3. Заполнение переменных и объектов будет зависеть не от программы, а от внешних факторов. Т.е. не так как хочет программист, а как повезёт. Передал/не передал, строка/массив. Конечно, можно фильтровать, но объектам не нужны одинаково отфильтрованные данные. Кому-то нужен массив, кому-то числовая строка, а кому-то любая строка подойдёт. Как место_где_распихиываются_данные_по_объектам узнает какому объекту что и в каком формате надо?
Какая красота. По пунктам.

1. Можно использовать foreach вместо for
2. А ещё лучше использовать extract
3. А ещё лучше не использовать такой подход в принципе. Можно переписать существующие переменные (свойства). Можно не найти концов при отладке, когда переменные таким неявным способом инициализируются.

PS. register_globals в своё время пилили-пилили и выпилили, а тут прямо-таки «назад в будущее», вернее сказать «вперёд в прошлое».
Напомнило мне вот такую историю: ithappens.ru/story/358
Не надо демагогии… Сравнивайте язык с языком, а фреймворк с фреймворкам.

Я вижу как идёт спор. Вы противопоставляете разработку на чистом языке разработке на фреймворке, показываете недостатки языка и достоинства фреймворка, сравниваете некоторых разработчиков на одном с некоторыми разработчиками на другом.
И опять. Сравниваем фреймворк и язык. Это всё равно, что *элегантный эпитет*. Никого не защищаю, просто отметил, что сравнение некорректно.
Да проблема в том, что понятие инкапсуляции несколько размыто. Но я попробую свою позицию высказать.

От кого скрываем?
От пользователя класса? — нет, в общем случае это невозможно. Пользователь может просто заглянуть в класс и всё посмотреть. А от себя так, вообще, не скроешь.

От кода, который использует класс? — нет, языки часто позволяют обходить эти защитные штуки, допустим, отражениями (рефлексиями). Поэтому нет технической возможности не допускать неправильные использования класса.

Получается, что у пользователя есть возможность обращаться к внутренностям реализации через то или иной манёвр, но это он не делает в повседневном коде. Почему? Потому язык говорит, что так не хорошо делать. И он с ним, как бы, договорился. Если язык не позволяет скрывать что-то в полной мере, то программисты договариваются между собой что скрыто, а что нет.

Ещё можно вспомнить для чего было придумано ООП. Чтобы было проще программировать. Как инкапсуляция позволяет упростить написание кода?

1. Упрощается абстракция. В момент использования класса мы можем «забыть» все его внутренности, и использовать только то, что открыто. Т.е. не надо помнить как какой класс и как именно реализован и что он будет использовать.

2. Локализовать будущие изменения. Изменения того или иного куска кода будет проще, если мы будем знать кто им пользуется. Инкапсуляция позволяет сократить таких пользователей путём расстановки ограничений.
Пример может быть более сложным, например, значение по умолчанию нужно брать из базы.

$name = Input::get('name', function() use ($db){$config = $db->loadConfig(); return $config['default_name'];});


В Вашем же случае либо придётся написать дополнительное условие

$name=isset($_GET['name'])?$_GET['name'] :null); 
if (is_null($name))
  {
  $config = $db->loadConfig(); 
  $name = $config['default_name'];
  }


, либо при каждом запросе обращаться к базе.

$config = $db->loadConfig(); 
$default_name = $config['default_name'];
$name=isset($_GET['name'])?$_GET['name'] :$default_name); 

Музыку не поменяли.
Кстати,
Some languages like Smalltalk and Ruby only allow access via object methods


en.wikipedia.org/wiki/Encapsulation_%28object-oriented_programming%29
Это скорее стратегия. И надо отметить, что такой подход как раз не характерен для ООП, а скорее это функциональный подход.

Кстати, как Вы думаете, для чего нужна инкапсуляция?
Эм… при чём здесь полиморфизм? Чтобы получить имя пользователя немного в другом формате нужно создать несколько классов?

Эм… методы для этого и нужны, чтобы работать с внутренним состоянием объекта. А как они это делают не наша забота.

Information

Rating
Does not participate
Location
Иркутск, Иркутская обл., Россия
Registered
Activity