developer tip

이것은 무엇을 의미 하는가?

copycodes 2020. 12. 25. 10:19
반응형

이것은 무엇을 의미 하는가? “구문 분석 오류 : 구문 오류, 예상치 못한 T_PAAMAYIM_NEKUDOTAYIM”


T_PAAMAYIM_NEKUDOTAYIM은 정말 이국적으로 들리지만, 제겐 절대적으로 말도 안되는 소리입니다. 나는 모든 것을 다음 코드 줄로 추적했습니다.

<?php
Class Context {
    protected $config;

    public function getConfig($key) { // Here's the problem somewhere...
    $cnf = $this->config;
    return $cnf::getConfig($key);
    }

    function __construct() {
    $this->config = new Config();
    }
}
?>

생성자에서 Config 객체를 만듭니다. 수업은 다음과 같습니다.

final class Config {
    private static $instance = NULL;
    private static $config;

    public static function getConfig($key) {
    return self::$config[$key];
    }

    public static function getInstance() {
    if (!self::$instance) {
        self::$instance = new Config();
    }
    return self::$instance;
    }

    private function __construct() {
    // include configuration file
    include __ROOT_INCLUDE_PATH . '/sys/config/config.php'; // defines a $config array
    $this->config = $config;
    }
}

이것이 작동하지 않는 이유 / 오류의 의미를 모릅니다 ...


T_PAAMAYIM_NEKUDOTAYIM은 PHP가 사용하는 이중 콜론 범위 해결입니다-::

코드를 한눈에 살펴보면 다음 줄이 있다고 생각합니다.

return $cnf::getConfig($key);

해야한다

return $cnf->getConfig($key);

첫 번째는 메서드를 정적으로 호출하는 방법입니다. $ cnf에 유효한 클래스이기도 한 문자열이 포함 된 경우이 코드는 유효합니다. -> 구문은 클래스 / 객체의 인스턴스에서 메서드를 호출하기위한 것입니다.


이 문제가있는 미래의 방문객을위한 2 센트입니다.

이것은 PHP 5.3의 올바른 구문입니다. 예를 들어 클래스 이름에서 정적 메서드를 호출하는 경우 :

MyClassName::getConfig($key);

이전에 $ cnf 변수에 ClassName을 할당 한 경우 여기에서 정적 메서드를 호출 할 수 있습니다 (PHP 5.3에 대해 이야기하고 있음).

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

그러나이 신택스는 PHP 5.2 이하에서는 작동하지 않으며 다음을 사용해야합니다.

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

이것이 5.2 버전에서이 오류가있는 사람들에게 도움이되기를 바랍니다 (이게 openfrog의 버전인지 알 수 없음).


귀하의 예에서

return $cnf::getConfig($key)

아마도 다음과 같아야합니다.

return $cnf->getConfig($key)

그리고 getConfig를 정적으로 만들지 마십시오.


여전히 이중 콜론을 사용해야하는 경우 PHP 5.3 이상에서 확인하십시오.


오류는 이중 콜론 연산자의 "부적절한 사용"때문입니다.

return $cnf::getConfig($key);

를 사용 ::하여 클래스 자체의 정적 메서드를 호출하려고합니다. 귀하의 예제에서 인스턴스화 된 객체에 대해 비 정적 메서드를 호출하려고합니다.

나는 당신이 원하는 것은 다음과 같습니다.

return $cnf->getConfig($key);

wikipedia에 따르면 "이중 콜론"범위 확인 연산자를 의미합니다.

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


It's the name for the :: operator

Wikipedia

ReferenceURL : https://stackoverflow.com/questions/1966010/what-does-this-mean-parse-error-syntax-error-unexpected-t-paamayim-nekudotay

반응형