programing

PHP 오류: 치명적인 오류: 상수 식에 잘못된 작업이 포함되어 있습니다.

copyandpastes 2023. 1. 2. 23:11
반응형

PHP 오류: 치명적인 오류: 상수 식에 잘못된 작업이 포함되어 있습니다.

에러가 표시된다.

치명적 오류: 상수식에 구성에 잘못된 작업이 포함되어 있습니다.214행의 php

그 행은 다음과 같습니다.

 protected static $dbname = 'mydb_'.$appdata['id'];

제가 인용문에 실수한 게 있나요?아니면 다른 데?

에러 메시지를 검색한 결과, 다른 원인(함수 정의의 동적 기본값)이 표시되었을 뿐입니다.

공식 Php 문서:

다른 PHP 정적 변수와 마찬가지로 정적 속성은 PHP 5.6 이전의 리터럴 또는 상수만 사용하여 초기화할 수 있습니다. 식은 허용되지 않습니다.PHP 5.6 이후에서는 const 식과 같은 규칙이 적용됩니다.컴파일 시에 평가할 수 있는 경우에 한정되는 식도 있습니다.

따라서 정적 변수를 다른 변수로 초기화할 수 없습니다.교체하다$appdata['id']일정한 스트링으로 또는 제거하다static기여하다.

이는 다른 변수의 내용을 알 수 없는 경우 모든 정적 선언이 컴파일 시간해결되기 때문입니다(공식 문서의 다른 페이지 참조).

리플렉션에 영향을 주지 않는 한 동적으로 생성된 값을 가진 정적 개인/보호 클래스 속성을 갖는 것은 클래스 외부에서 계산하는 방법밖에 없습니다.

class Foo
{
    protected static string $dbname = DBNAME;

    public static function debug(): string
    {
        return Foo::$dbname;
    }
}

$appdata = [
    'id' => 31416,
];
define('DBNAME', 'mydb_' . $appdata['id']);
var_dump(Foo::debug());

그러나 정확한 사용 사례에서는 속성이 정적일 이유가 전혀 없을 수 있습니다.이 경우 컨스트럭터를 사용하는 것처럼 간단합니다.

class Foo
{
    protected string $dbname;

    public function __construct(array $appdata)
    {
        $this->dbname = 'mydb_' . $appdata['id'];
    }

    public function debug(): string
    {
        return $this->dbname;
    }
}

$appdata = [
    'id' => 31416,
];
$foo = new Foo($appdata);
var_dump($foo->debug());

이는 정적 변수에 상수 값이 포함되어 있기 때문입니다.단, 고객님의 경우:

protected static $dbname = 'mydb_'.$appdata['id'];

$appdata['id']는 실행 중에 값을 변경할 수 있는 동적입니다.그래서 에러가 발생하고 있습니다.

이 오류가 발생하여 클래스 속성 배열 내에서 날짜를 선언하지 않는 것이 수정되었습니다.

public static $config_array = array(
    'start_date' => date('Y-m-d H:i:s') // No can do
);

참고로:- 상수 표현식에 일부 문자를 사용해도 동일한 오류가 발생했습니다.

public static $dbPassword="mAkE-34@-||sR";

이것이 에러의 원인입니다.이 ||는 논리 OR 연산자 문자인 스트링에서 삭제하면 동작합니다.

언급URL : https://stackoverflow.com/questions/40171546/php-error-fatal-error-constant-expression-contains-invalid-operations

반응형