سؤال
يرجى تحديد ما 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 لا شيء.
stdclass. هي وسيلة بها بي أتش بي تجنب إيقاف تفسير البرنامج النصي عندما يكون هناك بعض البيانات يجب وضعها في فئة، ولكن لسوء الحظ لم يتم تعريف هذه الفئة
مثال :
return $statement->fetchAll(PDO::FETCH_CLASS , 'Tasks');
سيتم وضع البيانات هنا في "المهام" المحددة مسبقا. ولكن، إذا فعلنا الكود كما هذا:
return $statement->fetchAll(PDO::FETCH_CLASS );
ثم بي أتش بي سوف تضع النتائج في stdclass. .
ببساطة بي أتش بي يقول أن: انظر، لدينا أطفال جيدون [أشياء] هنا ولكن بدون الآباء والأمهات. لذلك، سوف نرسل لهم إلى منزل رعاية الطفل الرضيع stdclass. :)
تستطيع ايضا استخذام 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';
ما الذي يجعل شخص ما للتفكير في استخدام نمط الكائن بدلا من أسلوب الصفيف ؟؟