What does this mean? “Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM”

前端 未结 8 1605
囚心锁ツ
囚心锁ツ 2020-11-28 09:34

T_PAAMAYIM_NEKUDOTAYIM sounds really exotic, but most certainly absolutely nonsense to me. I traced it all down to this lines of code:



        
相关标签:
8条回答
  • 2020-11-28 10:06

    The error is down to an "inappropriate use" of the double colon operator:

    return $cnf::getConfig($key);
    

    as by using the :: you're attempting to call a static method of the class itself. In your example you want to call a non-static method on an instantiated object.

    I think what you want is:

    return $cnf->getConfig($key);
    
    0 讨论(0)
  • 2020-11-28 10:07

    In your example

    return $cnf::getConfig($key)
    

    Probably should be:

    return $cnf->getConfig($key)
    

    And make getConfig not static

    0 讨论(0)
  • 2020-11-28 10:08

    T_PAAMAYIM_NEKUDOTAYIM is the double colon scope resolution thingy PHP uses - ::

    Quick glance at your code, I think this line:

    return $cnf::getConfig($key);
    

    should be

    return $cnf->getConfig($key);
    

    The first is the way to call a method statically - this code would be valid if $cnf contained a string that was also a valid class. The -> syntax is for calling a method on an instance of a class/object.

    0 讨论(0)
  • 2020-11-28 10:10

    According to wikipedia, it means a "double colon" scope resolution operator.

    http://en.wikipedia.org/wiki/Scope_resolution_operator

    0 讨论(0)
  • 2020-11-28 10:16

    It's the name for the :: operator

    Wikipedia

    0 讨论(0)
  • 2020-11-28 10:22

    Just my two cents for future visitors who have this problem.

    This is the correct syntax for PHP 5.3, for example if you call static method from the class name:

    MyClassName::getConfig($key);
    

    If you previously assign the ClassName to the $cnf variable, you can call the static method from it (we are talking about PHP 5.3):

    $cnf = MyClassName;
    $cnf::getConfig($key);
    

    However, this sintax doesn't work on PHP 5.2 or lower, and you need to use the following:

    $cnf = MyClassName;
    call_user_func(array($cnf, "getConfig", $key, ...otherposibleadditionalparameters... ));
    

    Hope this helps people having this error in 5.2 version (don't know if this was openfrog's version).

    0 讨论(0)
提交回复
热议问题