programing

PHP의 stdClass란 무엇입니까?

yoursource 2022. 11. 21. 23:08
반응형

PHP의 stdClass란 무엇입니까?

을 .stdClass empty.month.mpti.

stdClass는 다른 유형을 객체에 캐스팅할 때 사용되는 일반적인 '빈' 클래스입니다.다른 두 답변이 뭐라고 했음에도 불구하고stdClass는 PHP 객체의 기본 클래스가 아닙니다.이는 매우 쉽게 입증할 수 있습니다.

class Foo{}
$foo = new Foo();
echo ($foo instanceof stdClass)?'Y':'N';
// outputs 'N'

PHP에 기본 객체의 개념이 없다고 생각합니다.

stdClass인 빈입니다.PHP의 빈 입니다.Object 또는 Java 는 。object Python(편집: 그러나 실제로는 유니버설 베이스 클래스로 사용되지 않습니다.이 점을 지적해 주셔서 감사합니다.@Ciaran

익명 객체, 동적 속성 등에 유용합니다.

표준 클래스에서는 어떻게 해야 하는지 보여 .json_decode()[StdClass] : [StdClass] : [StdClass] : [StdClass] : [StdClass] : [StdClass] : [StDClass] : [StDL] :예에서는 않지만, 이 예에서는 보이지 않습니다.SoapClient::__soapCall표준 클래스

<?php
//Example with StdClass
$json = '{ "foo": "bar", "number": 42 }';
$stdInstance = json_decode($json);
echo $stdInstance->foo . PHP_EOL; //"bar"
echo $stdInstance->number . PHP_EOL; //42
//Example with associative array
$array = json_decode($json, true);
echo $array['foo'] . PHP_EOL; //"bar"
echo $array['number'] . PHP_EOL; //42

자세한 예는 PHPStdClass의 동적 속성을 참조하십시오.

stdClass는 PHP의 또 다른 훌륭한 기능입니다.익명 PHP 클래스를 만들 수 있습니다.예를 들어 보겠습니다.

$page=new stdClass();
$page->name='Home';
$page->status=1;

이제 페이지 오브젝트로 초기화하고 그 오브젝트를 기반으로 실행하는 다른 클래스가 있다고 생각합니다.

<?php
class PageShow {

    public $currentpage;

    public function __construct($pageobj)
    {
        $this->currentpage = $pageobj;
    }

    public function show()
    {
        echo $this->currentpage->name;
        $state = ($this->currentpage->status == 1) ? 'Active' : 'Inactive';
        echo 'This is ' . $state . ' page';
    }
}

이제 Page Object를 사용하여 새 PageShow 개체를 생성해야 합니다.

이 경우 새로운 클래스 템플릿을 작성할 필요가 없습니다.stdClass를 사용하여 즉시 클래스를 만들 수 있습니다.

    $pageview=new PageShow($page);
    $pageview->show();

또한 주목할 필요가 있습니다.stdClass오브젝트는 를 사용하여 생성할 수 있습니다.json_decode()뿐만 아니라.

stdClass를 사용하면 자체 속성을 사용하여 새 개체를 만들 수 있습니다.사용자의 세부 정보를 연관 배열로 나타내는 다음 예를 생각해 보십시오.

$array_user = array();
$array_user["name"] = "smith john";
$array_user["username"] = "smith";
$array_user["id"] = "1002";
$array_user["email"] = "smith@nomail.com";

개체의 속성과 동일한 세부 정보를 나타내야 하는 경우 다음과 같이 stdClass를 사용할 수 있습니다.

$obj_user = new stdClass;
$obj_user->name = "smith john";
$obj_user->username = "smith";
$obj_user->id = "1002";
$obj_user->email = "smith@nomail.com";

Joomla 개발자인 경우 자세한 내용은 Joomla 문서의 이 예를 참조하십시오.

저도 마찬가지예요.

$myNewObj->setNewVar = 'newVal'; 

stdClass 객체를 생성합니다.자동 캐스트

오늘 철자가 틀려서 이 사실을 알게 되었습니다.

$GLOBASLS['myObj']->myPropertyObj->myProperty = 'myVal';

멋지네요!

stdClass가 익명 클래스 또는 익명 개체가 아닙니다.

서의 답변에는 '먹다'라는 이 있습니다.stdClass이치그건 사실이 아니야.

stdClass는 일반적인 사전 정의된 클래스입니다.은 하다, 하다, 하다를 통해서 할 수 요.instanceof 함수 " " " "get_class여기엔 특별한 게 없어요.PHP는 다른 값을 객체에 캐스팅할 때 이 클래스를 사용합니다.

, 「」는stdClass는 프로그래머에 의해 사용됩니다.이치노이는 유용한 함수와 이 유스케이스가 실제 객체가 아닌 데이터 구조를 나타내기 때문입니다.

stdClass가 있는 이유는 PHP에서는 일반 어레이와 어소시에이트 어레이를 구분할 수 없기 때문입니다(Javascript에서처럼).{} 및 「」의 경우[]배열을 구분합니다).

따라서 빈 객체에 문제가 발생합니다.예를 들어보자.

PHP:

$a = [1, 2, 3]; // this is an array
$b = ['one' => 1, 'two' => 2]; // this is an associate array (aka hash)
$c = ['a' => $a, 'b' => $b]; // this is also an associate array (aka hash)

JSON이 변수 $c를 부호화한다고 가정합니다.

echo json_encode($c);
// outputs => {'a': [1,2,3], 'b': {one: 1, two: 2}}

, 그럼 이제 다.$b since since since 부 부 부 부$b됩니다)는, 다음과 같습니다( 「모든 키를 하셨습니까?」라고 표시됩니다.[]어레이 또는 오브젝트 중 하나일 수 있습니다.

따라서 json_encode를 다시 실행하면 출력이 달라집니다.

echo json_encode($c);
// outputs => {'a': [1,2,3], 'b': []}

있기 가 됩니다.b이것은 어소시에이트 어레이여야 하는데 PHP(또는 json_encode와 같은 함수)는 그렇지 않습니다.

stdClass는 구조하러 옵니다.같은 예를 다시 들자면

$a = [1, 2, 3]; // this is an array
$b = (object) ['one' => 1, 'two' => 2]; // this makes it an stdClass
$c = ['a' => $a, 'b' => $b]; // this is also an associate array (aka hash)

에서, 「」에서 모든 해도,$b하면 stdClass가

echo json_encode($c);
// outputs => {'a': [1,2,3], 'b': {}}

'이유'가 되는 이기도 합니다.json_encode ★★★★★★★★★★★★★★★★★」json_decode「stdClass」를 선택합니다.

 $c = json_decode('{"a": [1,2,3], "b": {}}', true); //true to deocde as array
 // $c is now ['a' => [1,2,3], 'b' => []] in PHP
 // if you json_encode($c) again your data is now corrupted

또한 Casting을 사용하면 실제로 @Bandula의 답변과 같은 객체를 작성할 필요가 없습니다.대신 어레이를 객체에 캐스팅하면 stdClass가 반환됩니다.예를 들어 다음과 같습니다.

$array = array(
    'Property1'=>'hello',
    'Property2'=>'world',
    'Property3'=>'again',
);

$obj = (object) $array;
echo $obj->Property3;

Output: again

실제로 빈 stdClass를 만들고 속도를 빈 클래스와 비교했습니다.

class emp{}

1000개의 stdClass와 emps를 작성했습니다.빈 클래스는 약 1100마이크로초만에 완료되었으며 stdClasses는 1700마이크로초 이상 소요되었습니다.따라서 오브젝트를 너무 많이 사용하고 싶다면 데이터를 저장하기 위해 자신만의 더미 클래스를 만드는 것이 좋습니다(쓰기 및 읽기 모두 배열이 훨씬 빠릅니다).

사용 중인 stdClass 개체

stdClass를 사용하면 익명 클래스를 만들 수 있으며 객체 캐스팅을 사용하여 OOP 스타일의 연관 배열 키에 액세스할 수도 있습니다.일반 객체 속성에 액세스하는 것과 같습니다.

class Example {

  private $options;

  public function __construct(Array $setup)
  {
    // casting Array to stdClass object
    $this->options = (object) $setup;

    // access stdClass object in oop style - here transform data in OOP style using some custom method or something...
    echo $this->options->{'name'}; // ->{'key'}
    echo $this->options->surname;  // ->key
  }

}

$ob1 = new Example(["name" => "John", "surname" => "Doe"]);

메아리치다

신원미상인

php.net 매뉴얼에는 stdClass가 무엇인지에 대한 사용자의 확실한 설명과 예가 몇 가지 있습니다.특히 http://php.net/manual/en/language.oop5.basic.php#92123, 마음에 듭니다.

stdClass는 기본 PHP 개체입니다.stdClass에 속성, 메서드 또는 상위 항목이 없습니다.매직 메서드는 지원되지 않으며 인터페이스를 구현하지 않습니다.

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

stdClass는 기본 클래스가 아닙니다!PHP 클래스는 어떤 클래스에서도 자동으로 상속되지 않습니다.다른 클래스를 명시적으로 확장하지 않는 한 모든 클래스는 독립 실행형입니다.이 점에서 PHP는 많은 객체 지향 언어와 다릅니다.

stdClass를 확장하는 클래스를 정의할 수는 있지만 stdClass는 아무 작업도 수행하지 않으므로 아무런 이점도 얻을 수 없습니다.

책에 대한 일부 데이터를 저장할 새 개체를 빠르게 만들고 싶은 경우.다음과 같은 작업을 수행합니다.

$book = new stdClass;
$book->title = "Harry Potter and the Prisoner of Azkaban";
$book->author = "J. K. Rowling";
$book->publisher = "Arthur A. Levine Books";
$book->amazon_link = "http://www.amazon.com/dp/0439136369/";

자세한 것은, http://www.webmaster-source.com/2009/08/20/php-stdclass-storing-data-object-instead-array/ 사이트를 확인해 주세요.

는 데이터가 있는 경우 php가 해석을 중지하지 않도록 하는 방법입니다만, 안타깝게도 이 클래스는 정의되어 있지 않습니다.

예:

 return $statement->fetchAll(PDO::FETCH_CLASS  , 'Tasks');

여기에서는 데이터가 미리 정의된 '태스크'에 저장됩니다.다만, 다음과 같이 코드를 설정했을 경우는 다음과 같습니다.

 return $statement->fetchAll(PDO::FETCH_CLASS );

php는 결과를 에 저장합니다.

php는 다음과 같이 말하고 있습니다: 보세요, 우리는 좋은 KIDS[Objects]를 가지고 있지만, 부모 없이 있습니다.그래서 우리는 그것들을 유아용 보육시설 로 보냅니다:)

두 개의 빈 stdClass는 엄밀하게 동일하지 않습니다.이것은 조롱의 기대를 쓸 때 매우 중요합니다.

php > $a = new stdClass();
php > $b = new stdClass();
php > var_dump($a === $b);
bool(false)
php > var_dump($a == $b);
bool(true)
php > var_dump($a);
object(stdClass)#1 (0) {
}
php > var_dump($b);
object(stdClass)#2 (0) {
}
php >

stClass는 php 자체에서 만든 빈 클래스로 php에서만 사용해야 합니다.그 이유는 단순히 빈 클래스가 아니기 때문입니다.php는 stdClass를 사용하여 stdClass를 사용해야 할 경우 어레이를 오브젝트 스타일로 변환하기 때문입니다.1회 사용 어레이(클래스보다 훨씬 빠름)2회 사용하시는 것이 좋습니다.

//example 1
$data=array('k1'=>'v1' , 'k2'=>'v2',....);

//example 2
//creating an empty class is faster than instances an stdClass
class data={}
$data=new data();
$data->k1='v1';
$data->k2='v2';

어레이 스타일 대신 오브젝트 스타일을 사용하는 것을 생각하게 하는 이유는 무엇입니까?

이 경우에도 하실 수 있습니다.object선택한 오브젝트에 어레이를 캐스팅하려면:

Class Example
{
   public $name;
   public $age;
}

서 타입의 .Example초기화하려면 다음 중 하나를 수행합니다.

$example = new Example();
$example->name = "some name";
$example->age = 22;

또는

$example = new Example();
$example = (object) ['name' => "some name", 'age' => 22];

두 번째 방법은 많은 속성을 가진 개체를 초기화하는 데 대부분 유용합니다.

stdClassPHP php php php php php php php 。기본 속성이나 메서드가 없습니다.기본적으로 활자를 주조하거나 동적 특성을 가진 물체를 만드는 데 사용됩니다. asjavascript를 결정할 수 .

$o = new \stdClass();

와 동등하다

const o = {};

빈 개체를 생성하고 나중에 프로그램 제어 흐름에 의해 채워집니다.

언급URL : https://stackoverflow.com/questions/931407/what-is-stdclass-in-php

반응형