Emad Saif نشر 9 يونيو 2022 أرسل تقرير نشر 9 يونيو 2022 لدي واجهة تسمى IUser وأقوم بإستعمال هذه الواجهة في بعض الأصناف classes على النحو التالي: interface IUser { // ... } class MyClass implements IUser { // ... } الآن إذا قمت بعمل كائن Object من الصنف MyClass، فهل يمكنني التحقق من أن هذا الكائن يقوم بعمل implements للواجهة IUser؟ هل توجد دالة أو طريقة نقوم بهذا الأمر؟ 3 اقتباس
1 عمر قره محمد نشر 9 يونيو 2022 أرسل تقرير نشر 9 يونيو 2022 يمكنك فعل ذلك من خلال العبارة instanceof وكمثال : <?php class MyClass {} class AnotherClass extends MyClass{} $obj = new AnotherClass(); // سوف يحقق الشرط if($obj instanceof AnotherClass) { echo "The object is AnotherClass"; } // وكذلك يحقق الشرط if($obj instanceof MyClass) { echo "The object is MyClass<br>"; } ?> اقرأ أيضاً فيما يتعلق بالـ instanceof : https://wiki.hsoub.com/PHP/type_operators 1 اقتباس
1 سامح أشرف نشر 9 يونيو 2022 أرسل تقرير نشر 9 يونيو 2022 تدعم لغة PHP المعامل instanceof والذي يسمح لك بالتأكد من أن كائن معين عبارة عن مثيل instance من صنف معين أو يستخدم واجهة معينة interface، ويمكن إستخدامه كما يلي: <?php interface IUser { // ... } class MyClass implements IUser { // ... } $obj = new MyClass(); if ($obj instanceof IUser) { echo "obj implements IUser\n"; } if ($obj instanceof MyClass) { echo "obj is instance of MyClass"; } /* Output: obj implements IUser obj is instance of MyClass */ أيضًا يمكنك إستخدام الدالة class_implements والتي تسمح بمعرفة الواجهات التي يستعملها الصنف: $obj = new MyClass(); print_r(class_implements('MyClass')); /* Output: Array ( [IUser] => IUser ) */ وبالتالي يمكن إستخدام هذه الطريقة للتحقق من أن الصنف يستخدم واجهة معينة من خلال isset كما يلي: $obj = new MyClass(); $interfaces = class_implements('MyClass'); if (isset($interfaces['IUser'])) { echo "obj implements IUser"; } مع العلم أن الطريقة الأولى (المعامل instanceof) أسرع في الأداء من الطريقة الثانية (الدالة class_implements). 1 اقتباس
0 Adnane Kadri نشر 9 يونيو 2022 أرسل تقرير نشر 9 يونيو 2022 بجانب ما اقترحه المدربون يمكنك استعمال الواجهة البرمجية لـ ReflectionClass في PHP عن طريق التابع implementsInterface: <?php interface OtherInterface { /**/ } interface IUser { /**/ } class MyClass implements IUser { /**/ } $class = new ReflectionClass('MyClass'); echo $class->implementsInterface('IUser'); // true echo $class->implementsInterface('OtherInterface'); // false مثلما يمكنك عمل نفس الشيء عن طريق الوظيفة is_subclass_of في حالة الحاجة الى التحقق من ما ان كان كائن من ما عن صنف ما يطبق واجهة: <?php interface OtherInterface { /**/ } interface IUser { /**/ } class MyClass implements IUser { /**/ } $class = new MyClass(); echo is_subclass_of($class, 'IUser'); // true echo is_subclass_of($class ,'OtherInterface'); // false للاستزادة: دوال التعامل مع الكائنات والأصناف في PHP 1 اقتباس
السؤال
Emad Saif
لدي واجهة تسمى IUser وأقوم بإستعمال هذه الواجهة في بعض الأصناف classes على النحو التالي:
الآن إذا قمت بعمل كائن Object من الصنف MyClass، فهل يمكنني التحقق من أن هذا الكائن يقوم بعمل implements للواجهة IUser؟
هل توجد دالة أو طريقة نقوم بهذا الأمر؟
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.