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 :: Версия для печати :: CLASS метод в методе [2]
Форумы портала PHP.SU » PHP » Программирование на PHP » CLASS метод в методе

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

16. kochan10 - 28 Июня, 2010 - 15:43:36 - перейти к сообщению
Вот! Правильно JustUserR говорит=)
17. JustUserR - 28 Июня, 2010 - 16:45:58 - перейти к сообщению
kochan10 пишет:
Вот! Правильно JustUserR говорит=)
Благодарю Улыбка На самом деле начиная с версии PHP 5.3 функции начинают становиться объектами первого рода - поскольку становиться доступной конструкция return function() {} и ей подобные то есть настоящие замыкание Но тем не менее в вышеуказанном примене даже с точки зрения новых возможностей указанные функции замыканиями не являются - а просто являются вложенными функциями вызываемыми из другой функции без реального сохранения контекста
18. ALEN - 28 Июня, 2010 - 17:48:13 - перейти к сообщению
kochan10
Тот пример которые Вы описали - это самый правильный, но меня другой интересовал, со вложенностью!

JustUserR
Пытаюсь найти простое решение, а вот вложенность, еще ни в каких документация не видел, с подробным описанием, чего и как. Конечно идеально избегать ее, это не сложно, но все же, что не запрещено, должно же как то реализоваться. Или я не прав?
19. Champion - 28 Июня, 2010 - 18:15:23 - перейти к сообщению
ALEN, если надо внутри метода написать функцию, которая будет нужна только внутри этого метода, то:
PHP:
скопировать код в буфер обмена
  1. function method()
  2. {
  3. if(!function_exists('foo')) { function foo() {.....} }
  4. ....
  5. }
Тогда и проблем с переопределением не будет.
20. ALEN - 28 Июня, 2010 - 20:45:09 - перейти к сообщению
Champion
Проблема не с определением, а с передачей в нее информации, без помощи аргументов функции...
21. Champion - 28 Июня, 2010 - 20:57:43 - перейти к сообщению
А почему нельзя передать параметр? Если нужны свойства класса, то функции можно передать $this.
22. ALEN - 28 Июня, 2010 - 21:12:17 - перейти к сообщению
Champion
В том-то и дело, что я ищу все способы...
А передача параметров - это самый простой и правильный способ, но я сейчас хочу понять, почему $this не желает во вложенный метод передаваться...
23. JustUserR - 29 Июня, 2010 - 16:10:29 - перейти к сообщению
ALEN пишет:
JustUserR
Пытаюсь найти простое решение, а вот вложенность, еще ни в каких документация не видел, с подробным описанием, чего и как. Конечно идеально избегать ее, это не сложно, но все же, что не запрещено, должно же как то реализоваться. Или я не прав?
Вы совершенно правы по поводу того что если имеется некоторая возможность и она явно не запрещена - то должен быть способ позволяющий использовать ее должным образом В данном случае проблема сводится к двум частям - во-первых PHP не поддерживает по умолчанию различные именные и пакетные пространства имен и контекстные области видимости - ограничиваясь лишь локальными и глобальными значениями соответственно - при этом классические представления функций не являются объектами первого рода и их использование внутри других функций является несколько неоднозначным - с одной стороны вложенная функция создается в локальном контексте и не может использоваться снаружи по имени - но с другой стороны эту функцию нельзя вернуть по ссылке как замыкание - и к тому же локальная функция может конфликтовать с именами глобальных функций То есть если рассматривать вложенные переменные в блоках кода то они разумеется являются объектами первого рода и с ними все понятно - они или перекрывают друг друга а для доступа к глобальными или межпакетным используется ключевое слово global - с классическими функциями же такая схема не работает хотя они и могут определяться динамически С использованием вложенных функций внутри класса являющихся по сути методами ситуация еще усложняется - поскольку по умолчанию не определено отношение этих функций к структуре класса
Сделовательно если вам хочется иметь набор вложенных или динамических функций то лучше использовать специальные функции первого рода - они называются lambda-функциями и создаются с помощью create_function - с ними уже можно работать как с переменными и они подчиняются всем правилам вложенности блоков и последовательности их интерпретации

 

Powered by ExBB FM 1.0 RC1