Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Подскажите, что почитать по PHP [2]
Форумы портала PHP.SU » Разное » Литература » Подскажите, что почитать по PHP

Страниц (3): « 1 [2] 3 »
 

16. esterio - 18 Марта, 2013 - 16:06:06 - перейти к сообщению
Теперь я внесу ясность. Начнем с теории. Три основых принципа в ООП:
1. Инкапсуляция - в JS нету модификторов доступа. Все данные защищаютсья с помощю замиканий
CODE (javascript):
скопировать код в буфер обмена
  1. A = function() {
  2.  // private
  3.  var _property;
  4.  var _privateMethod = function() { /* actions */ } // скрытый метод
  5.  
  6.  // public
  7.  this.getProperty = function() { // открытый интерфейс
  8.   return _property;
  9.  }
  10.  
  11.  this.setProperty = function(value) { // открытый интерфейс
  12.   _property = value;
  13.   _privateMethod();
  14.  }
  15. }

2. Наследование - также нет такого понятия. Делается новый обьект, который сливает два или более обьектов или с помощю прототипов(как я говрил прототипное програмирование)
CODE (javascript):
скопировать код в буфер обмена
  1. var Parent = function( data ) {
  2.     this.data = data || false;
  3.     this.public_method = function() { return 'Public Method'; }
  4. }
  5.  
  6. var Child = function() {
  7.     this.public_method = function() { return 'Redefined public method'; }
  8.     this.getData = function() { return 'Data: ' + this.data; }
  9. }
  10.  
  11. Child.prototype = new Parent('test');
  12. var Test = new Child();


Test.getData(); // => "Data: test"
Test.public_method(); // => "Redefined public method"
Test.data; // => "test"

3. Полиморфизм - проверка instanceof.

Как видите все ето только емуляция. но никак чистый ООП. Или я не прав?
(Добавление)
nerv пишет:
Может не будем разводить холивары, а просто скажите что мне почитать по теме? Как писал DeepVarvar "все равно каждый останется при своем мнении"

А я и не розвожу холивар. Мы же не тупо орем во вес голос свое мнение. Мы доводим свою точку зрения аргументировано. Значит у нас диалог. И мне очень интересно его окончить. А вдруг я не прав и Вы меня поправите.

теперь про wordpress. Сам делал плагин для него. Скажу чесно лучше codex-а инфы вы не найдете. В большинстве случаев статти расчитаны на новичков в програмирование и описивают простие примеры(правда нашел все таки несколько десатков интересных статтей)
17. nerv - 18 Марта, 2013 - 16:26:54 - перейти к сообщению
Zuldek пишет:
Или речь идет о цикле разработки CMS? Тогда ~PHP Кузнецов Симдянов... 2 издание - как раз разрабатывается простенькая CMS.

Сразу проглядел. Видимо, это то, что мне нужно. Спасибо! Улыбка

caballero пишет:
и ссылки на бредятину с педивикии

ну тогда иди азбуку почитай, если вики не угодила
(Добавление)
esterio пишет:
Инкапсуляция - в JS нету модификторов доступа. Все данные защищаютсья с помощю замиканий

еще используют соглашения о наименовании

Я писал (пишу) на vb(a) и знаю, что такое private|public.

esterio пишет:
Наследование - также нет такого понятия. Делается новый обьект, который сливает два или более обьектов или с помощю прототипов(как я говрил прототипное програмирование)
CODE (javascript):

Прототипное программирование не отменяет понятий ООП. Вики гласит, что
Цитата:
Прототипное программирование — стиль объектно-ориентированного программирования


esterio пишет:
3. Полиморфизм - проверка instanceof.

Не понял, почему у вас понятие полиморфизма упирается в instanceof.
Цитата:
[url=http://ru.wikipedia.org/wiki/Полиморфизм_(программирование)]Полиморфизм[/url] позволяет писать более абстрактные программы и повысить коэффициент повторного использования кода. Общие свойства объектов объединяются в систему, которую могут называть по-разному — интерфейс, класс.


Это обычная практика на js (и не только). Возьмите тот же jQuery UI и его интерфейс/класс Widget (один, общий для всех)

esterio пишет:
Как видите все ето только емуляция. но никак чистый ООП. Или я не прав?

см. выше в этом посте "прототипное программирование - стиль ООП". На мой взгляд эти слова более чем красноречивы.

esterio пишет:
А я и не розвожу холивар

Извините! Это, скорее, больше не вам было адресовано, а некоторым несдержанным отвечающим. Сам периодически такой, куда деваться Ха-ха

esterio пишет:
теперь про wordpress. Сам делал плагин для него. Скажу чесно лучше codex-а инфы вы не найдете. В большинстве случаев статти расчитаны на новичков в програмирование и описивают простие примеры(правда нашел все таки несколько десатков интересных статтей)

Благодарю!
18. esterio - 18 Марта, 2013 - 16:56:48 - перейти к сообщению
nerv пишет:
Не понял, почему у вас понятие полиморфизма упирается в instanceof.

Ну представте что у вас есть массив с 10 разных обьектов. Полиморфизм означает то, чо у них единый интерфейс и скажум есть метод show - так вот если будет хоть один оьект который не имеет даный интерфейс будет ошыбка. поетому нужно проверять. В том же ПХП можно просто указать возле параметра функции(см. Type Hinting).

П.С. педовикия не последняя инстанция знаний
(Добавление)
В догонку
Цитата:
Объекты (они же - ассоциативные массивы, хэши) и работа с ними в Javascript - реализованы не так, как в большинстве языков. С этим связано много ошибок и непоняток.

В этой статье описаны базовые свойства объектов javascript, создание и изменение, перечисление свойств и т.п.

Объект в javascript представляет собой обычный ассоциативный массив или, иначе говоря, "хэш". Он хранит любые соответствия "ключ => значение" и имеет несколько стандартных методов.


http://javascript[dot]ru/tutorial/object/intro - даному ресурсу я доверяю как-никак
19. nerv - 18 Марта, 2013 - 17:19:20 - перейти к сообщению
esterio пишет:
у представте что у вас есть массив с 10 разных обьектов. Полиморфизм означает то, чо у них единый интерфейс и скажум есть метод show - так вот если будет хоть один оьект который не имеет даный интерфейс будет ошыбка. поетому нужно проверять. В том же ПХП можно просто указать возле параметра функции(см. Type Hinting).

в js, как вы отмечали выше, существует instanceof. Кроме того, в нем есть такое понятие как "утиная типизация".

по примеру: цикл по массиву, проверяем каждый элемент массива на то, что он объект, экземпляр необходимого нам конструктора, имеет метод show и если имеет вызываем его

esterio пишет:
П.С. педовикия не последняя инстанция знаний

Согласен, но оскорблять ее зачем? Подмигивание

Если доверяете данному ресурсу, то вот ссылка на мой профиль http://javascript[dot]ru/forum/members/17434-nerv_/

Еще: не понял к чему цитата с ресурса?
20. esterio - 18 Марта, 2013 - 17:35:44 - перейти к сообщению
nerv пишет:

по примеру: цикл по массиву, проверяем каждый элемент массива на то, что он объект, экземпляр необходимого нам конструктора, имеет метод show и если имеет вызываем его

А я о чем. Пример с того же ПХП
PHP:
скопировать код в буфер обмена
  1. class foo
  2. {
  3.         public function set(bar $bar){}
  4. }
21. nerv - 18 Марта, 2013 - 17:52:02 - перейти к сообщению
esterio пишет:
А я о чем. Пример с того же ПХП

Я еще не дочитал до классов в PHP Закатив глазки , но вижу, из примера, что имеется класс Foo с методом (публичным) set.

Мой вопрос касательно
esterio пишет:
Ну представте что у вас есть массив с 10 разных обьектов. Полиморфизм означает то, чо у них единый интерфейс и скажум есть метод show - так вот если будет хоть один оьект который не имеет даный интерфейс будет ошыбка. поетому нужно проверять. В том же ПХП можно просто указать возле параметра функции(см. Type Hinting).

что мешает сделать это
nerv пишет:
по примеру: цикл по массиву, проверяем каждый элемент массива на то, что он объект, экземпляр необходимого нам конструктора, имеет метод show и если имеет вызываем его

в javascript? Когда я описывал алгоритм, я подразумевал, что он может быть реализован на js. Если вы считаете, что на js это не возможно, обоснуйте почему.
22. esterio - 18 Марта, 2013 - 18:00:19 - перейти к сообщению
Я не считаю что ето не возможно. Я лиш веду до того что ето всего лиш емуляция. Я ничево против JS не имею. Он достаточно хорошый язык. Но его использование сводится к манипуляциям с DOM и стилями в большенстве случаев. Поетому ООП там совать думаю не стоит. А вот пользоватся замиканиями, его динамикой и прочими плюшками стоит. Но зачем там емуляция наследования которую делают я не понимаю. Тот же делегатор в соседней теме - я писал что для меня ето не делегатор, а просто обработчик собития. Думаю так реагирует каждый который знает другой ЯП. например прогер на JAVA будет орать во всю горлянку что динамическая типизация зло, что ПХП недо-язык и прочее. Моя же думка что каждому свое назначение: js - работа с DOM, ПХП - веб, Java, C++ - десктоп, asambler - драйвера, boot-загружчики(тоесть очень низкоуровные компоненты системы). И то что например в том же ассамблере нету ООП неозночает что он плохой, просто у него другая специализация.
(Добавление)
nerv пишет:
в javascript? Когда я описывал алгоритм, я подразумевал, что он может быть реализован на js. Если вы считаете, что на js это не возможно, обоснуйте почему.

Да отвлекся от вопроса. Я привел пример кода ПХП где не нужно делаь вручную проверку типа обьекта. За Вас ето сделает ПХП. Вот и все.
23. nerv - 18 Марта, 2013 - 18:34:02 - перейти к сообщению
esterio пишет:
Я лиш веду до того что ето всего лиш емуляция

1. это элементарно реализуется на JS: внутри метода set проверяем приходящий объект на соответствие экземпляра классу и бросаем исключение / генерируем сообщение об ошибке
2. что еще интересней, не исключено, что это будет реализовано в ecmascript 6 (следующем стандарте языка). По крайней мере все к этому идет Улыбка

В современном js существует еще такой метод
CODE (javascript):
скопировать код в буфер обмена
  1. Object.getPrototypeOf(obj)

возвращает прототип объекта

Вообще, в современном js существует много чего интересного, начиная со "строго режима" (который, кстати, всем настоятельно рекомендую использовать). Обо многом написано здесь http://learn[dot]javascript[dot]ru/descr[dot][dot][dot]-getters-setters

esterio пишет:
Я ничево против JS не имею. Он достаточно хорошый язык. Но его использование сводится к манипуляциям с DOM и стилями в большенстве случаев. Поетому ООП там совать думаю не стоит.

На сегодняшний день ситуация такова, что большинство сложных и средней сложности приложений на клиенте пишутся с применением ООП. Более того, если вы пишите простое приложение и в последствии захотите его расширить / сделать расширяемым, вы обязаны применять ООП. Это раз.
Два: существует серверный javascript - node.js. Уже достаточно много сервисов его использут, в т.ч. ВК и Яндекс.Почта.

esterio пишет:
Но зачем там емуляция наследования которую делают я не понимаю.

Если вы чего-то не понимаете, это еще не значит, что оно не надо Подмигивание Другое дело, что на js надо писать опираясь на прототипы, а не на классы (в противном случае - мама дорогая).

esterio пишет:
Моя же думка что каждому свое назначение

Зависит от умения и фантазии разработчика Ха-ха

UPD не знаю, что вы имели ввиду под "делегатором" (прокси/посредник?), но, как я обозначил в соответствующей теме, существует понятие "делегирование событий".
24. esterio - 18 Марта, 2013 - 19:02:11 - перейти к сообщению
Почти полностю согласен. Только не надо забывать про JScript для ІЕ. Думаю стоит заканчивать. Я пока-что останусь при своем мнени(гляди и увижу Вашими глазами). Но думаю ето со временем
25. armancho7777777 - 18 Марта, 2013 - 19:23:14 - перейти к сообщению
esterio пишет:
Делается новый обьект, который сливает два или более обьектов или с помощю прототипов(как я говрил прототипное програмирование)

Наиболее точная имитация наследования:
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. var Test = function(argsConstruct)
  3. {
  4.         this.v = argsConstruct;
  5.        
  6.         this.myMethod = function(arg)
  7.         {
  8.                 return arg * this.v;
  9.         };
  10. };
  11.  
  12.  
  13. var Test2 = function(argsConstruct)
  14. {
  15.         this.constructor.apply(this, arguments);
  16.        
  17.         this.myMethod2 = function(arg)
  18.         {
  19.                 return arg * this.myMethod(arg);
  20.         };
  21. };
  22.  
  23. Test2.prototype = Test.prototype;
  24.  
  25. var t = new Test2(3);
  26.  
  27. window.alert(t.myMethod2(2)); // 12
  28.  
26. DeepVarvar - 18 Марта, 2013 - 20:55:35 - перейти к сообщению
Ну вот. Я подождал пока успокоились Улыбка

Кто там говорил что js не объектно ориентированный язык?
А нукся опишите что есть объект?
Пральна - это такая хрень, у которой есть методы и св-ва, так?

Отлично, в чем проблема:
CODE (javascript):
скопировать код в буфер обмена
  1. console.log(''.length);
Это что по вашему?
CODE (javascript):
скопировать код в буфер обмена
  1. console.log(typeof '');
Ухтыш! А чо эт такое?
CODE (javascript):
скопировать код в буфер обмена
  1. console.log(''.match(/(.*)/));
Да ну на! И так тоже можно?

Еще не убедились что тут все сплошь объекты?
Ах, да! Еще же есть эти, киты (кенты, три кента) ООП, мать их..


Оберну в офф: Я вам хочу напомнить, а те кто не знал, сказать, что сам я являюсь ярым противником засиранья мозгов парадигмой ООП. Но это не значит, что я его не использую. Я его использую только там, где без него никак не обойтись. Кто видел мой код в больших объемах/проектах - знает.


Так вот, если в одном ЯП что-то реализовано неким образом, это совсем не значит что в остальных оное вообще нужно.

У каждого языка своя идеология. И если кто-то начал орать, что он придумал штандарт (-нфюрер), то это не значит что надо хватать это и по быстрому реализовывать и в своем языке.

Отчего же, подумайте - сами разработчики javascript до сих пор не реализовали этих "трех кентов" из других ЯП? Ну не идиоты же они, верно?
Тогда какого /^х\w{2}$/, простите, вы лезете с идеологией других ЯП в javascript?

Ну вот по сути - зачем кому-то понадобилось вводить модификатор "private" для методов и свойств?
Подумайте, я жду любой ответ, только не вида: "Затем чтобы скрыть их от доступа извне", потому, что:
От кого вы там собрались защищаться? От самих себя любимых?
Хм.. Может от горе-разрабов,
которые кодить не умеют и решат вдруг накормить "запретный" метод левыми аргументами шоп усё упало?
Таки пусь упадёт - это их проблема.

Ладно еще когда идет речь о серверном (или компилируемом) ЯП и там нужно проверять входные данные. Исходники не всегда видно, и кто попало туда не лазиет.
А что же в js? Да вот он исходник! Какая там инкапсуляция, вы чо?
Да я с кансоли по F12 щас зайду и на лету модифицирую любой js.

Наследование? Полиморфизм? Ну заюзай прототипы,
или как сделано в некоторых js-фреймворках, клонируй объект из двух.

Чо? Закатив глазки
27. nerv - 18 Марта, 2013 - 20:59:33 - перейти к сообщению
armancho7777777 Улыбка

Раз уж эта тема превратилась в обсуждение всего понемногу, продолжу в том же ключе Ха-ха

armancho7777777 пишет:
Наиболее точная имитация наследования:

судя по коду, метод

должен находиться в прототипе функции конструктора. В этом случае он не будет создаваться отдельно для каждого объекта, а будет общим для всех.
как вариант без конструкторов
CODE (javascript):
скопировать код в буфер обмена
  1. var obj = {
  2.     method: function() {
  3.         return this.x * 2;
  4.     }
  5. };
  6.  
  7.  
  8. var some = Object.create( obj );
  9.  
  10. some.x = 2;
  11.  
  12. some.method2 = function() {
  13.     return this.method() << 1;
  14. };
  15.  
  16.  
  17. alert( some.method2() );


DeepVarvar пишет:
Я подождал пока успокоились

ты опять оказался прав - все остались при своем мнении Улыбка

кстати, знаешь, как работает?
CODE (javascript):
скопировать код в буфер обмена
  1. console.log(''.length);


да и
DeepVarvar пишет:
Тогда какого /^х\w{2}$/

\W
28. DeepVarvar - 18 Марта, 2013 - 21:06:22 - перейти к сообщению
nerv пишет:
кстати, знаешь, как работает?
Знаю. Могу не так глубоко знать, но знаю.
CODE (javascript):
скопировать код в буфер обмена
  1. var s = new String('');

Хотя typeof s вернет уже object а не string, как в первом примере.
(Добавление)
nerv пишет:
\W
Таки нет, именно маленькая.
29. nerv - 18 Марта, 2013 - 21:20:00 - перейти к сообщению
DeepVarvar примерно так. Во время исполнения оборачивается (string, number etc.)

DeepVarvar пишет:
Таки нет, именно маленькая.

Цитата:
\w - Найдет любой словесный (латинский алфавит) символ, включая буквы, цифры и знак подчеркивания. Эквивалентно [A-Za-z0-9_]. Например, /\w/ найдет 'a' в "apple," '5' в "$5.28," и '3' в "3D."

тогда я тебя не понял )))

http://javascript[dot]ru/basic/regular-expression


p.s.: ну вы тут холиваршики Улыбка Прям как я Ха-ха
30. esterio - 18 Марта, 2013 - 22:17:51 - перейти к сообщению
DeepVarvar пишет:
Ну вот по сути - зачем кому-то понадобилось вводить модификатор "private" для методов и свойств?

Private не особо нужен, но засорять globale scope нехорошо. Почему? Да потому что две лыби использующее единое пространтво имен поубивают друг-друга /^[а-нх]{3}$/

 

Powered by ExBB FM 1.0 RC1