source

이것은 무엇을 의미합니까?"Parse error: 구문 오류, 예기치 않은 T_PAAMAYIM_NEKUDOTAYIM"

factcode 2023. 7. 23. 14:45
반응형

이것은 무엇을 의미합니까?"Parse error: 구문 오류, 예기치 않은 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 버전에서 이 오류를 가진 사람들에게 도움이 되기를 바랍니다(이것이 오픈프로그 버전이었는지는 모르겠습니다).

예를 들어,

return $cnf::getConfig($key)

아마도 다음과 같아야 할 것입니다.

return $cnf->getConfig($key)

그리고 getConfig를 정적이 아닌 상태로 만듭니다.

여전히 이중 콜론을 사용해야 한다면 PHP 5.3+에서 를 확인하십시오.

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

return $cnf::getConfig($key);

을 사용하는 것처럼::클래스 자체의 정적 메서드를 호출하려고 합니다.예제에서는 인스턴스화된 개체에 대해 정적 메서드가 아닌 메서드를 호출하려고 합니다.

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

return $cnf->getConfig($key);

위키피디아에 따르면, 그것은 "이중 콜론" 범위 해결 연산자를 의미합니다.

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

그것은 그것의 이름입니다.::교환입니다.

위키백과

라라벨을 사용하는 모든 사람에게.Laravel 7.0에서도 같은 오류가 발생했습니다.오류는 다음과 같습니다.

syntax error, unexpected '::' (T_PAAMAYIM_NEKUDOTAYIM), expecting ';' or ','

내 Routes\web.php 파일에 있었는데, 이 파일은 다음과 같습니다.

use Illuminate\Support\Facades\Route;
use Illuminate\Http\Request;
use // this was an extra **use** statement that gave me the error

Route::get('/', function () {
    return view('save-online.index');
})->name('save-online.index');

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

반응형