سؤال

يرجى تحديد ما stdClass يكون.

هل كانت مفيدة؟

المحلول

stdClass هل الطبقة الفارغة العامة في فب، نوع من مثل Object في جاوة أو object في بيثون (يحرر: ولكن ليس تستخدم فعلا كصف قاعدة عالمية؛ شكرا ciaran ل مشيرا إلى ذلك).

إنه مفيد للأشياء المجهولة والخصائص الديناميكية وما إلى ذلك

طريقة سهلة للنظر في 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 جديد مع كائن صفحة.

فيما يلي حاجة لكتابة قالب فئة جديدة لهذا يمكنك ببساطة استخدام 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";

إذا كنت مطور جملة هذا المثال في مستندات جملة لمزيد من الفهم.

بطريقة مماثلة،

$myNewObj->setNewVar = 'newVal'; 

غلة كائن stdclass - السيارات المصبون

لقد وجدت هذا اليوم عن طريق أخطر:

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

بارد!

Stdclass ليس فئة مجهولة أو كائن مجهول

الإجابات هنا تشمل التعبيرات التي stdClass هو فئة مجهولة أو حتى كائن مجهول. انها ليست حقيقية.

stdClass هو مجرد فئة محددة مسبقا عادية. يمكنك التحقق من هذا باستخدام instanceof المشغل أو الوظيفة get_class. وبعد لا شيء خاص يذهب هنا. يستخدم PHP هذا الفصل عند إلقاء القيم الأخرى للكائن.

في كثير من الحالات حيث stdClass يستخدم من قبل المبرمجين يتمتع الصفيف خيار أفضل، بسبب الوظائف المفيدة وحقيقة أن هذه USECASE تمثل هيكل البيانات وليس كائنا حقيقيا.

في الواقع حاولت إنشاء STDClass فارغة ومقارنت السرعة للفئة الفارغة.

class emp{}

ثم انتقلت إنشاء 1000 stdclasses و EMPS ... تم إجراء فصول فارغة في حوالي 1100 من ميكرويون، بينما استغرق Stdclasses أكثر من 1700 ميكرويون. لذلك أعتقد أنه من الأفضل إنشاء فئة وهمية الخاصة بك لتخزين البيانات إذا كنت ترغب في استخدام الكائنات لذلك بشكل سيء للغاية (صفائف أسرع بكثير لكل من الكتابة والقرائن).

كائنات Stdclass قيد الاستخدام

يسمح لك Stdclass بإنشاء فصول مجهولة ومعالجة كائنات كائن يمكنك أيضا الوصول إلى مفاتيح صفيف Assciative في نمط 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"]);

سوف صدى

فلان الفلاني

تجدر الإشارة أيضا إلى أنه من خلال استخدام Crasting، لا تحتاج فعليا إلى إنشاء كائن كما هو الحال في الإجابة الواردة بواسطة AdSandula. بدلا من ذلك، يمكنك ببساطة إلقاء صفيفك إلى كائن ويتم إرجاع 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 stdclasses فارغة ليست متساوين تماما. هذا مهم جدا عند كتابة توقعات السخرية.

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