PHP에서 빈 값으로부터 기본 객체를 생성 하시겠습니까?
PHPPHP에서 빈 값으로부터 기본 객체를 생성 하시겠습니까?
PHP 환경을 PHP 5.4 이상으로 업그레이드 한 후에 만이 오류가 표시됩니다. 오류는 다음 코드 행을 가리 킵니다.
오류:
암호:
$res->success = false;
먼저 $ res 객체를 선언해야합니까?
해결법
-
==============================
1.새 환경에서 PHP 버전 5.3.x 미만의 error_reporting에서 E_STRICT 경고를 사용하도록 설정하거나 PHP 버전 5.4 이상에서 error_reporting을 E_WARNING 이상으로 설정하면됩니다. 이 에러는 $ res가 NULL이거나 아직 초기화되지 않았을 때 발생합니다 :
새 환경에서 PHP 버전 5.3.x 미만의 error_reporting에서 E_STRICT 경고를 사용하도록 설정하거나 PHP 버전 5.4 이상에서 error_reporting을 E_WARNING 이상으로 설정하면됩니다. 이 에러는 $ res가 NULL이거나 아직 초기화되지 않았을 때 발생합니다 :
$res = NULL; $res->success = false; // Warning: Creating default object from empty value
$ res가 이미 어떤 값으로 초기화되었지만 객체가 아닌 경우 PHP는 다른 오류 메시지를보고합니다 :
$res = 33; $res->success = false; // Warning: Attempt to assign property of non-object
PHP 5.4 이전의 E_STRICT 표준 또는 PHP> = 5.4의 일반 E_WARNING 오류 수준을 준수하려면 일반 객체를 만들고 속성의 성공을 지정하려고한다고 가정하면 $ res를 stdClass의 객체로 선언해야합니다 전역 네임 스페이스에서 :
$res = new \stdClass(); $res->success = false;
-
==============================
2.이 메시지는 PHP <= 5.3의 경우 E_STRICT입니다. PHP 5.4 이후로, 그것은 unluckilly E_WARNING로 변경되었습니다. E_WARNING 메시지가 유용하기 때문에 메시지를 완전히 비활성화하지 않으려 고합니다.
이 메시지는 PHP <= 5.3의 경우 E_STRICT입니다. PHP 5.4 이후로, 그것은 unluckilly E_WARNING로 변경되었습니다. E_WARNING 메시지가 유용하기 때문에 메시지를 완전히 비활성화하지 않으려 고합니다.
이 경고를 없애려면 다음 코드를 사용해야합니다.
if (!isset($res)) $res = new stdClass(); $res->success = false;
이것은 완전히 동등한 대체입니다. PHP가 암묵적으로 수행하는 것과 똑같은 것을 보장합니다 - 불행히도 경고와 함께 - 암시 적 객체 생성. 당신이 절대적으로 그렇지 않은 경우를 제외하고는 항상 객체가 이미 존재하는지 확인해야합니다. 마이클에 의해 제공되는 코드는 일반적으로 좋지 않습니다. 일부 컨텍스트에서 상황에 따라 객체가 코드의 같은 위치에 정의되기도하기 때문입니다.
-
==============================
3.간단히,
간단히,
$res = (object)array("success"=>false); // $res->success = bool(false);
또는
$res = (object)array(); // object(stdClass) $res = new stdClass(); // old method
과
$res->success = !!0; // bool(false) $res->success = false; // bool(false) $res->success = (bool)0; // bool(false)
-
==============================
4.이 시도:
이 시도:
ini_set('error_reporting', E_STRICT);
-
==============================
5.행의 "@"문자를 시작하면 PHP는이 행에 대한 경고 / 통지를 표시하지 않습니다. 예 :
행의 "@"문자를 시작하면 PHP는이 행에 대한 경고 / 통지를 표시하지 않습니다. 예 :
$unknownVar[$someStringVariable]->totalcall = 10; // shows a warning message that contains: Creating default object from empty value
이 행에 대한 경고를 방지하려면 다음과 같이 행의 "@"문자 시작을 넣어야합니다.
@$unknownVar[$someStringVariable]->totalcall += 10; // no problem. created a stdClass object that name is $unknownVar[$someStringVariable] and created a properti that name is totalcall, and it's default value is 0. $unknownVar[$someStringVariable]->totalcall += 10; // you don't need to @ character anymore. echo $unknownVar[$someStringVariable]->totalcall; // 20
나는이 트릭을 개발할 때 사용하고있다. 나는 경고를 올바르게 처리하지 않으면 미래의 큰 오류가 될 것이므로 모든 경고 메시지를 비활성화하는 것을 좋아하지 않습니다.
-
==============================
6.배열이 있고 객체를 추가하는 경우이 방법을 사용해보십시오.
배열이 있고 객체를 추가하는 경우이 방법을 사용해보십시오.
$product_details = array(); foreach ($products_in_store as $key => $objects) { $product_details[$key] = new stdClass(); //the magic $product_details[$key]->product_id = $objects->id; //see new object member created on the fly without warning. }
이것은 나중에 사용하기 위해 객체의 ARRAY를 전송합니다 ~!
-
==============================
7.이 오류를 얻는 간단한 방법은 아래 (a)를 입력하는 것입니다. 즉, (b)
이 오류를 얻는 간단한 방법은 아래 (a)를 입력하는 것입니다. 즉, (b)
(a) $ this-> my-> 변수
(b) $ this-> my_variable
사소하지만 매우 쉽게 간과하고 당신이 그것을 찾고 있지 않다면 발견하기가 어렵습니다.
-
==============================
8.이 문제는 사용자가 시작되지 않은 개체의 인스턴스에 지정되어 있기 때문에 발생합니다. 예 :
이 문제는 사용자가 시작되지 않은 개체의 인스턴스에 지정되어 있기 때문에 발생합니다. 예 :
너의 경우:
$user->email = 'exy@gmail.com';
해결책:
$user = new User; $user->email = 'exy@gmail.com';
-
==============================
9.변수가 선언되고 올바른 유형인지 확인해야 할 수도 있습니다.
변수가 선언되고 올바른 유형인지 확인해야 할 수도 있습니다.
if (!isset($res) || !is_object($res)) { $res = new \stdClass(); // With php7 you also can create an object in several ways. // Object that implements some interface. $res = new class implements MyInterface {}; // Object that extends some object. $res = new class extends MyClass {}; } $res->success = true;
PHP 익명 클래스를 참조하십시오.
-
==============================
10.나는 비슷한 문제가 있었고 이것은 문제를 해결하는 것 같다. $ res 객체를 클래스에 초기화하면됩니다. 여기서 클래스 이름이 test라고 가정합니다.
나는 비슷한 문제가 있었고 이것은 문제를 해결하는 것 같다. $ res 객체를 클래스에 초기화하면됩니다. 여기서 클래스 이름이 test라고 가정합니다.
class test { //You can keep the class empty or declare your success variable here } $res = new test(); $res->success = false;
-
==============================
11.아니, 그렇지 않다. 성공 값을 오브젝트에 추가 할 때 생성된다. 기본 클래스가 지정되지 않으면 상속된다.
아니, 그렇지 않다. 성공 값을 오브젝트에 추가 할 때 생성된다. 기본 클래스가 지정되지 않으면 상속된다.
-
==============================
12.오류가있는 PHP 파일의 맨 위에 다음을 추가하면 오류가 더 이상 표시되지 않습니다.
오류가있는 PHP 파일의 맨 위에 다음을 추가하면 오류가 더 이상 표시되지 않습니다.
error_reporting(E_ERROR | E_PARSE);
from https://stackoverflow.com/questions/8900701/creating-default-object-from-empty-value-in-php by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
PHP로 날짜별로 파일 정렬 (0) | 2018.09.08 |
---|---|
PHP에서 배열의 중복 값을 제거하는 방법 (0) | 2018.09.08 |
일련의 부모 - 자식 관계를 계층 트리로 변환 하시겠습니까? (0) | 2018.09.08 |
언제 PHP 상수 "PHP_EOL"을 사용합니까? (0) | 2018.09.08 |
PHP를 통해 CSV로 내보내기 (0) | 2018.09.08 |