programing

PHP 오류 메시지 "알림:정의되지 않은 상수" 평균을 사용합니까?

firstcheck 2022. 9. 5. 23:45
반응형

PHP 오류 메시지 "알림:정의되지 않은 상수" 평균을 사용합니까?

PHP가 로그에 다음 오류를 기록하고 있습니다. "알려주세요:정의되지 않은 상수 사용"입니다.

로그 오류:

PHP Notice:  Use of undefined constant department - assumed 'department' (line 5)
PHP Notice:  Use of undefined constant name - assumed 'name' (line 6)
PHP Notice:  Use of undefined constant email - assumed 'email' (line 7)
PHP Notice:  Use of undefined constant message - assumed 'message' (line 8)

관련 코드 행:

$department = mysql_real_escape_string($_POST[department]);
$name = mysql_real_escape_string($_POST[name]);
$email = mysql_real_escape_string($_POST[email]);
$message = mysql_real_escape_string($_POST[message]);

이것은 무엇을 의미하며 왜 표시되는가?

department문자열(여기서 배열 키로 사용)을 의미합니다.PHP의 문자열은 따옴표로 묶어야 합니다.옛날에는 PHP가 단일 단어 문자열에 따옴표를 사용하는 것에 느슨했지만, 요즘은 오래 전에 사라졌습니다.

따라서, 그것은 반드시'department'또는"department".

다른 오류도 마찬가지입니다.

현재로선, 이 행성은department,name,email,message, 등. 이러한 상수가 발견되지 않으면 PHP(이상하게)는 문자열('부서' 등)로 해석하지만 경고합니다.이러한 상수는 나중에 정의하면 쉽게 끊어질 수 있습니다(소문자 상수를 사용하는 것은 좋지 않지만).

이 오류 메시지는 PHP가 알 수 없는 토큰을 같은 이름의 상수 문자열로 암시적으로 선언하기 때문에 발생합니다.

즉, 다음과 같이 해석하려고 합니다(따옴표 누락에 주의).

$_POST[department]

이것이 PHP에서 유효한 구문이 될 수 있는 유일한 유효한 방법은 이전에 상수가 존재했을 경우입니다.department정의되어 있습니다.따라서 안타깝게도 이 시점에서 치명적인 오류로 인해 정지하는 대신 이 알림을 발행하고 동일한 이름과 값으로 상수가 정의된 것처럼 작동합니다.

// Implicit declaration of constant called department with value 'department'
define('department', 'department');  

이 오류 메시지는 여러 가지 방법으로 얻을 수 있지만 모두 동일한 근본 원인, 즉 상수가 될 수 있는 토큰이 있습니다.

따옴표가 없는 문자열:$my_array[bad_key]

이것이 고객님의 경우 문제이며, 이는 견적되지 않은 문자열 배열 키가 있기 때문입니다.문자열 키를 수정하면 버그가 수정됩니다.

변경:

$department = mysql_real_escape_string($_POST[department]);
...(etc)...

수신인:

$department = mysql_real_escape_string($_POST['department']);
...(etc)...

변수 결측 달러 기호:var_without_dollar

이 에러 메세지가 표시되는 또 다른 이유는,$변수 또는$this->회원으로부터.예를 들어, 다음 중 하나가 유사한 오류 메시지를 발생시킵니다.

my_local;   // should be $my_local
my_member;  // should be $this->my_member

변수 이름에 잘못된 문자가 있습니다.$bad-variable-name

변수 이름(하이픈)에 허용되지 않는 문자를 사용하려고 하면 유사하지만 더 미묘한 문제가 발생할 수 있습니다.-밑줄 대신 )를 사용합니다._흔한 경우일 겁니다

예를 들어, 변수 이름에는 밑줄을 사용할 수 있기 때문에, 이것은 괜찮습니다.

if (123 === $my_var) {
  do_something();
}

하지만 이것은 아닙니다.

if (123 === $my-var) {
  do_something();
}

다음과 같이 해석됩니다.

if (123 === $my - var) {  // variable $my minus constant 'var'
  do_something();
}

클래스 범위를 지정하지 않고 클래스 상수를 참조합니다.

를 '클래스 범위'로 .:: 당신이 이것을 , PHP는 PHP에 말하고 할 것입니다.define().

예:

class MyClass {
  const MY_CONST = 123;

  public function my_method() {
    return self::MY_CONST;  // This is fine
  }


  public function my_method() {
    return MyClass::MY_CONST;  // This is fine
  }

  public function my_bad_method() {
    return MY_CONST;  // BUG - need to specify class scope
  }
}

이 버전의 PHP에 정의되지 않았거나 설치되지 않은 확장에 정의된 상수 사용

새로운 버전의 PHP에만 존재하는 일부 시스템 정의 상수가 있습니다. 예를 들어 다음과 같은 모드 옵션 상수입니다.PHP_ROUND_HALF_DOWNPHP 5.3 php php php php php php php php php php php php php php.

PHP 5.2에서 이 기능을 사용하려고 하면 다음과 같이 말할 수 있습니다.

$rounded = round($my_var, 0, PHP_ROUND_HALF_DOWN);

다음 오류 메시지가 나타납니다.

정의되지 않은 상수 PHP_ROUND_HALF_DOWN - 가정된 'PHP_ROUND_HALF_DOWN' 경고 (2): round()의 매개 변수 수가 잘못되었습니다.

예요.""

예:

$_array[text] = $_var;

변경처:

$_array["text"] = $_var;

어레이 키 주위에 작은 따옴표를 넣지 않았습니다.

$_POST[이메일]

다음 항목이어야 합니다.

$_POST['이메일']

작은 따옴표를 삽입합니다.

$department = mysql_real_escape_string($_POST['department']);
$name = mysql_real_escape_string($_POST['name']);
$email = mysql_real_escape_string($_POST['email']);
$message = mysql_real_escape_string($_POST['message']); 

코드 점화기를 사용하는 것이 다른지 잘 모르겠습니다만, 이름에 「」를 사용하고 있습니다만, 매우 효과가 있습니다.

$department = mysql_real_escape_string($_POST["department"]);
$name = mysql_real_escape_string($_POST["name"]);
$email = mysql_real_escape_string($_POST["email"]);
$message = mysql_real_escape_string($_POST["message"]);

안부 전해요,

호르헤.

포스트 변수를 올바르게 사용하는 방법은 다음과 같습니다.

<?php

$department = $_POST['department'];

?>

작은따옴표(') 사용

미리 정의된 가져오기 상수가 MySQL 확장과 함께 사라졌으므로 첫 번째 함수 전에 추가해야 합니다.

//확정된 가져오기 상수

define('MYSQL_BOTH',MYSQLI_BOTH);
define('MYSQL_NUM',MYSQLI_NUM);
define('MYSQL_ASSOC',MYSQLI_ASSOC);

테스트해서 성공했어요.

언급URL : https://stackoverflow.com/questions/2941169/what-does-the-php-error-message-notice-use-of-undefined-constant-mean

반응형