Различия в разрешении области и обратных вызовах в PHP 5.3 - PullRequest
3 голосов
/ 15 февраля 2011

Работая над некоторым кодом сегодня, я обнаружил, что следующее будет работать в 5.3, но не раньше.

<?php

class Test{
    public function uasort(){
        $array = array( 'foo' => 'bar', 123 => 456 );
        uasort( $array, 'self::uasort_callback' );

        return $array;
    }

    static private function uasort_callback( $a, $b ){
        return 1;
    }
}

$Test = new Test;
var_dump( $Test->uasort() );

// version 5.3.2  - works fine
// version 5.2.13 - Fatal error: Cannot call method self::uasort_callback() or method does not exist

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

uasort( $array, 'Test::uasort_callback' );

прекрасно работает и в 5.2.

1 Ответ

2 голосов
/ 15 февраля 2011

Судя по разделу обратных вызовов в руководстве по PHP, я бы сказал, что он называется «вызов метода относительного статического класса». Смотри http://php.net/manual/en/language.pseudo-types.php

// Type 4: Static class method call (As of PHP 5.2.3)
call_user_func('MyClass::myCallbackMethod');

// Type 5: Relative static class method call (As of PHP 5.3.0)
class A {
    public static function who() {
        echo "A\n";
    }
}

class B extends A {
    public static function who() {
        echo "B\n";
    }
}

call_user_func(array('B', 'parent::who')); // A

Немного другой сценарий, но я думаю, что возможность звонить parent::who или self::uasort_callback - это одно и то же.

...