namespace, определение функции в методе и вызов этой функции

apt-get_mebeer

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

Есть класс A, в его методе getType() пишу вот такой код

PHP:
<?php

namespace API

class A {
   public function getType() {
         function future($card){
                return $card['future'];
         }
         $past_feed = array_filter($feed, "future");
   }
}
Помогите понять почему это плохо? Я понимаю, есть лямбда функции, но такой код? Именно чем он плох... Дело в том что это очень старый код и после того как я начал все переводить в PSR-4 у меня после добавления к данному классу пространства имен, код выше перестал работать.
 
И вы ещё спрашиваете, чем он плох?… Как минимум тем, что он не работает…
 
после добавления к данному классу пространства имен, код выше перестал работат
А без namespace вот точно такой же код работает? Как интересно, можно посмотреть на этот код?

UPD: ох##ть, работает. PHP, вашу ж мать!
UPD2: Ну только при первом вызове, каэш =)
 
@apt-get_mebeer,
  1. функция future может уже существовать
  2. $feed появлсяется неоткуда
  3. $feed может не быть массивом
  4. Может отсутствовать ключ future
 
А без namespace вот точно такой же код работает? Как интересно, можно посмотреть на этот код?

UPD: ох##ть, работает. PHP, вашу ж мать!
UPD2: Ну только при первом вызове, каэш =)
Да да, именно работает. Вот и прошу объснить. Видимо человек торопился когад писал такое... Но код рабочий, откатил сейчас ветку все работает =)
 
@fixxxer,
А без namespace вот точно такой же код работает? Как интересно, можно посмотреть на этот код?

UPD: ох##ть, работает. PHP, вашу ж мать!
UPD2: Ну только при первом вызове, каэш =)
Вот собственно еще кусок кода, точно такой же

Код:
        function cmp($a, $b){
            return $a['delta'] < $b['delta'];
        }

        if(count($org)) {
            usort($org, "cmp");

            //convert to array
            foreach ($org as $item) {
                $org_array[] = $item;
            }
        }
Да этот кусок кода это отдельный метод обычного класса. Класса БЕЗ namespace. Как только добавлю namespace все отваливается. Видимо я не достаточно понимаю работу компилятора.
 
А без namespace вот точно такой же код работает? Как интересно, можно посмотреть на этот код?

UPD: ох##ть, работает. PHP, вашу ж мать!
Ну оно проваливается насквозь же, в глобальную область видимости. Такое поведение уже очень давно же, уже неск. раз обсуждали вроде.
 
Ну оно проваливается насквозь же, в глобальную область видимости. Такое поведение уже очень давно же, уже неск. раз обсуждали вроде.
То есть получается, весь функционал класса видет только в пространстве A, но вот код который создает функции внутри метода этого класса создает их в глобальном пространстве?
Я поискал на форуме подобное, что то не смог найти. Если не сложно, можно ссылку. Спасибо за ответ
 
То есть получается, весь функционал класса видет только в пространстве A, но вот код который создает функции внутри метода этого класса создает их в глобальном пространстве?
Я поискал на форуме подобное, что то не смог найти. Если не сложно, можно ссылку. Спасибо за ответ
http://php.net/manual/ru/functions.user-defined.php - пример #3 и текст ниже него объясняет, почему это работает так. Это довольно древняя херь, оставленная для поддержки обратной совместимости, насколько понимаю.
 
Как только добавлю namespace все отваливается
Потому что namespace распространяется на определение функций. В строковом варианте нужно всегда указывать имя с полным неймспейсом. Т.е. с array_filter($feed, "API\\future") должно заработать.
 
Потому что namespace распространяется на определение функций. В строковом варианте нужно всегда указывать имя с полным неймспейсом. Т.е. с array_filter($feed, "API\\future") должно заработать.
Вурдалак, работает. Всем спасибо за ответы и помощь, невнимательность.
 
@fixxxer,

Вот собственно еще кусок кода, точно такой же.
Это сработает только при первом вызове метода, а на второй будет ошибка "функция с таким именем уже определена".
Нафиг тебе такое?

http://php.net/manual/ru/functions.user-defined.php - пример #3 и текст ниже него объясняет, почему это работает так. Это довольно древняя херь, оставленная для поддержки обратной совместимости, насколько понимаю.
Ну в php4 я такое помню, но почему-то думал, что давно выпилили. Бред полный же.
 
Это сработает только при первом вызове метода, а на второй будет ошибка "функция с таким именем уже определена".
Нафиг тебе такое?


Ну в php4 я такое помню, но почему-то думал, что давно выпилили. Бред полный же.
Ну слушай, мне это захотелось понять, данные куски кода уже выпилиены, пока что в хелпер.
 
Сверху