복붙노트

PHP에서 빈 값으로부터 기본 객체를 생성 하시겠습니까?

PHP

PHP에서 빈 값으로부터 기본 객체를 생성 하시겠습니까?

PHP 환경을 PHP 5.4 이상으로 업그레이드 한 후에 만이 오류가 표시됩니다. 오류는 다음 코드 행을 가리 킵니다.

오류:

암호:

$res->success = false;

먼저 $ res 객체를 선언해야합니까?

해결법

  1. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    4.이 시도:

    이 시도:

    ini_set('error_reporting', E_STRICT);
    
  5. ==============================

    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. ==============================

    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. ==============================

    7.이 오류를 얻는 간단한 방법은 아래 (a)를 입력하는 것입니다. 즉, (b)

    이 오류를 얻는 간단한 방법은 아래 (a)를 입력하는 것입니다. 즉, (b)

    (a) $ this-> my-> 변수

    (b) $ this-> my_variable

    사소하지만 매우 쉽게 간과하고 당신이 그것을 찾고 있지 않다면 발견하기가 어렵습니다.

  8. ==============================

    8.이 문제는 사용자가 시작되지 않은 개체의 인스턴스에 지정되어 있기 때문에 발생합니다. 예 :

    이 문제는 사용자가 시작되지 않은 개체의 인스턴스에 지정되어 있기 때문에 발생합니다. 예 :

    너의 경우:

    $user->email = 'exy@gmail.com';
    

    해결책:

    $user = new User;
    $user->email = 'exy@gmail.com';
    
  9. ==============================

    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. ==============================

    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. ==============================

    11.아니, 그렇지 않다. 성공 값을 오브젝트에 추가 할 때 생성된다. 기본 클래스가 지정되지 않으면 상속된다.

    아니, 그렇지 않다. 성공 값을 오브젝트에 추가 할 때 생성된다. 기본 클래스가 지정되지 않으면 상속된다.

  12. ==============================

    12.오류가있는 PHP 파일의 맨 위에 다음을 추가하면 오류가 더 이상 표시되지 않습니다.

    오류가있는 PHP 파일의 맨 위에 다음을 추가하면 오류가 더 이상 표시되지 않습니다.

    error_reporting(E_ERROR | E_PARSE);
    
  13. from https://stackoverflow.com/questions/8900701/creating-default-object-from-empty-value-in-php by cc-by-sa and MIT license