문제

무엇을 정의하십시오 stdClass 이다.

도움이 되었습니까?

해결책

stdClass PHP의 일반적인 빈 클래스는 종류입니다. Object 자바에서 또는 object 파이썬에서 (편집하다: 그러나 실제로 보편적 인 기본 클래스로 사용되지는 않습니다. 감사해요 @ciaran for 이것을 지적합니다).

익명의 개체, 동적 특성 등에 유용합니다.

STDClass를 고려하는 쉬운 방법은 연관 배열의 대안입니다. 방법을 보여주는 아래이 예를 참조하십시오 json_decode() stdClass 인스턴스 또는 연관 배열을 얻을 수 있습니다. 또한이 예에서는 표시되지 않았습니다. SoapClient::__soapCall stdClass 인스턴스를 반환합니다.

<?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

보다 PHP 및 STDCLASS의 동적 특성 더 많은 예를 보려면.

다른 팁

stdClass 다른 유형을 객체에 캐스팅 할 때 사용되는 일반적인 '빈'클래스 일뿐입니다. 다른 두 가지 대답이 말하는 것에도 불구하고 stdClass ~이다 ~ 아니다 PHP의 객체에 대한 기본 클래스. 이것은 상당히 쉽게 입증 될 수 있습니다.

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

나는 PHP에 기본 객체의 개념이 있다고 생각하지 않습니다.

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';
    }
}

이제 페이지 객체가있는 새 Pageshow 객체를 만들어야합니다.

여기에 새로운 클래스 템플릿을 작성할 필요가 없습니다.

    $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 프로그래머가 사용합니다. 유용한 기능 과이 usecase가 실제 객체가 아닌 데이터 구조를 나타내는 사실 때문에 배열은 더 나은 옵션입니다.

실제로 나는 빈 stdclass를 만들려고 시도하고 속도를 빈 클래스와 비교했습니다.

class emp{}

그런 다음 1000 개의 STDClass와 EMP를 만들었습니다 ... 빈 클래스는 약 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"]);

윌 에코

존 도우

또한 캐스팅을 사용하면 @bandula가 제공 한 답과 같이 실제로 객체를 만들 필요는 없습니다. 대신 배열을 객체에 시전하면 stdClass가 반환됩니다. 예를 들어:

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

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

Output: again

책에 대한 일부 데이터를 보유 할 새 개체를 신속하게 만들고 싶다면. 당신은 다음과 같은 일을 할 것입니다 :

$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/ 자세한 사항은.

2 개의 빈 성병이 엄격하게 같지 않다는 점을 명심하십시오. 이것은 조롱의 기대를 쓸 때 매우 중요합니다.

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 >

php.net 매뉴얼에는 몇 가지 확실한 설명과 STDClass가 무엇인지 사용자가 기여한 예제가 있습니다. http://php.net/manual/en/language.basic.php#92123, https://stackoverflow.com/a/1434375/2352773.

stdClass는 기본 PHP 객체입니다. STDClass에는 속성, 방법 또는 부모가 없습니다. 마법 방법을 지원하지 않으며 인터페이스를 구현하지 않습니다.

스칼라 나 배열을 객체로 시전하면 stdclass 인스턴스가 나타납니다. 일반 객체 인스턴스가 필요할 때마다 stdclass를 사용할 수 있습니다.

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

stdclass를 확장하는 클래스를 정의 할 수 있지만 stdclass는 아무것도하지 않기 때문에 아무런 이점이 없습니다.

그 방법입니다 일부 데이터가 클래스에 넣어야 할 때 스크립트 해석 중지를 피하십시오. 불행히도이 클래스는 정의되지 않았습니다.

예시 :

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

여기서 데이터는 사전 정의 된 '작업'에 넣습니다. 그러나 우리가 다음과 같이 코드를했다면 :

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

그럼 결과를 넣을 것입니다 .

간단히 말한다 : 봐, 우리는 여기에 좋은 아이들이 있지만 부모가 없다. 그래서 우리는 그들을 유아 육아 주택으로 보낼 것입니다 :)

당신은 또한 사용할 수 있습니다 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];

두 번째 방법은 주로 속성이 많은 객체를 초기화하는 데 유용합니다.

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';

배열 스타일 대신 객체 스타일을 사용하는 것에 대해 누군가가 생각하는 이유는 무엇입니까 ???

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top