[php] PHP에서 빈 객체를 정의하는 방법

새로운 배열로 나는 이것을한다 :

$aVal = array();

$aVal[key1][var1] = "something";
$aVal[key1][var2] = "something else";

객체와 비슷한 구문이 있습니까?

(object)$oVal = "";

$oVal->key1->var1 = "something";
$oVal->key1->var2 = "something else";



답변

$x = new stdClass();

매뉴얼주석이 가장 잘 요약됩니다.

stdClass는 기본 PHP 객체입니다. stdClass에는 속성, 메서드 또는 부모가 없습니다. 매직 메소드를 지원하지 않으며 인터페이스를 구현하지 않습니다.

스칼라 또는 배열을 Object로 캐스팅하면 stdClass의 인스턴스가 생성됩니다. 일반 객체 인스턴스가 필요할 때마다 stdClass를 사용할 수 있습니다.


답변

“빈”객체를 생성하는 표준 방법은 다음과 같습니다.

$oVal = new stdClass();

그러나 PHP> = 5.4에서는 개인적으로 다음 을 사용하는 것을 선호합니다.

$oVal = (object)[];

더 짧고 개인적으로 stdClass 때문에 더 명확하게 생각합니다. 가 초보 프로그래머에게 오도 될 수 (예 : “클래스가 아닌 객체를 원합니다!”…).

PHP <5.4와 동일합니다 :

$oVal = (object) array();

(object)[] 에 해당 new stdClass() .

PHP 매뉴얼을 참조하십시오 ( here ).

stdClass : typecasting to object로 작성됩니다.

그리고 ( 여기 ) :

개체가 개체로 변환되면 수정되지 않습니다. 다른 유형의 값이 오브젝트로 변환 되면 stdClass 내장 클래스의 새 인스턴스가 작성 됩니다.


그러나 @PaulP가 말한 것처럼 empty ($ oVal)은 false를 반환합니다 .

속성이없는 개체는 더 이상 비어있는 것으로 간주되지 않습니다.

예를 들어, 다음과 같이 쓰는 경우 :

$oVal = new stdClass();
$oVal->key1->var1 = "something"; // PHP creates  a Warning here
$oVal->key1->var2 = "something else";

PHP는 다음 경고를 생성하여 속성 key1(객체 자체)을 암시 적으로 생성합니다

경고 : 빈 값에서 기본 객체 생성

구성 ( 오류보고 레벨 참조 )에 브라우저에이 경고가 표시 되면 문제가 될 수 있습니다 . 이것은 또 다른 전체 주제이지만 오류 제어 연산자 (@) 를 사용하여 경고를 무시 하는 빠르고 더러운 접근 방법이 있습니다 .

$oVal = new stdClass();
@$oVal->key1->var1 = "something"; // the warning is ignored thanks to @
$oVal->key1->var2 = "something else";


답변

PHP에는 빈 객체와 같은 의미가 없다는 것을 지적하고 싶습니다.

$obj = new stdClass();
var_dump(empty($obj)); // bool(false)

물론 $ obj는 비어있을 것입니다.

반면에 빈 배열은 두 경우 모두 비어 있습니다.

$arr = array();
var_dump(empty($arr));

비어있는 changelog 함수에서 인용

속성이없는 개체는 더 이상 비어있는 것으로 간주되지 않습니다.


답변

php.net이 최고라고 말했습니다.

$new_empty_object = new stdClass();


답변

JavaScript로 익명 유형의 객체를 만드는 것이 얼마나 쉬운 지 좋아합니다.

//JavaScript
var myObj = {
    foo: "Foo value",
    bar: "Bar value"
};
console.log(myObj.foo); //Output: Foo value

그래서 항상 자바 스크립트처럼 PHP에서 이런 종류의 객체를 작성하려고합니다 .

//PHP >= 5.4
$myObj = (object) [
    "foo" => "Foo value",
    "bar" => "Bar value"
];

//PHP < 5.4
$myObj = (object) array(
    "foo" => "Foo value",
    "bar" => "Bar value"
);

echo $myObj->foo; //Output: Foo value

그러나 이것은 기본적으로 배열이므로 익명 함수를 js와 같은 속성에 할당하는 것과 같은 작업을 수행 할 수 없습니다.

//JavaScript
var myObj = {
    foo: "Foo value",
    bar: function(greeting) {
        return greeting + " bar";
    }
};
console.log(myObj.bar("Hello")); //Output: Hello bar

//PHP >= 5.4
$myObj = (object) [
    "foo" => "Foo value",
    "bar" => function($greeting) {
        return $greeting . " bar";
    }
];
var_dump($myObj->bar("Hello")); //Throw 'undefined function' error
var_dump($myObj->bar); //Output: "object(Closure)"

글쎄, 할 수는 있지만 IMO는 실용적이지 않으며 깨끗하지 않습니다.

$barFunc = $myObj->bar;
echo $barFunc("Hello"); //Output: Hello bar

또한이 synthax를 사용하면 재미있는 놀라움을 찾을 수 있습니다 있지만 대부분의 경우 잘 작동합니다.


답변

당신이 잊어 버린 경우 zombat의 답변 외에도 stdClass

   function object(){

        return new stdClass();

    }

이제 할 수있는 일 :

$str='';
$array=array();
$object=object();


답변

다음을 사용할 수 있습니다 new stdClass()(권장).

$obj_a = new stdClass();
$obj_a->name = "John";
print_r($obj_a);

// outputs:
// stdClass Object ( [name] => John ) 

또는 빈 배열을 stdClass 내장 클래스의 새 빈 인스턴스를 생성하는 객체로 변환 할 수 있습니다.

$obj_b = (object) [];
$obj_b->name = "John";
print_r($obj_b);

// outputs: 
// stdClass Object ( [name] => John )  

또는 null값을 stdClass 내장 클래스의 비어있는 새 인스턴스를 생성하는 객체 로 변환 할 수 있습니다 .

$obj_c = (object) null;
$obj_c->name = "John";
print($obj_c);

// outputs:
// stdClass Object ( [name] => John )