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_DOWN
PHP 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
'programing' 카테고리의 다른 글
부울 객체를 Java 문자열로 변환하는 최선의 방법 (0) | 2022.09.05 |
---|---|
Mysql 케이스 문이 작동하지 않습니다. (0) | 2022.09.05 |
vuex, vuejs 앱의 변환에서만 상태를 변경해야 하는 이유는 무엇입니까? (0) | 2022.09.05 |
Vue.js의 옵션 부모 요소 (0) | 2022.08.15 |
vue 멀티 셀렉트의 초점을 맞추고 활성화하는 방법 (0) | 2022.08.15 |