سؤال

أنا أحاول فهم المفاهيم الأساسية في OOP.ما هي ساكنة و ديناميكية المتغيرات والأساليب في وجوه المنحى البرمجة ؟ ما هو على سبيل المثال الفرق بين استخدام $هذا مقابلمزدوجة القولون (::)?

$هذا ($this->a_method())

  • المزايا:?.
  • العيوب:?..."هذا" ليس الذاتي توثيق كما في: $this->method_from_an_extended_class().

مزدوجة القولون (someclass::a_method())

  • المزايا:?
  • العيوب:?
هل كانت مفيدة؟

المحلول

"الثابت" و"الديناميكي" ليسا الوصف الصحيح لذلك.

-> يشير أ وظائف المثيل أو بيانات المثيل, ، مما يعني أن الوظيفة أو البيانات لها معنى ضمني $this مرجع.وبعبارة أخرى، فأنت تشير إلى الوظيفة أو المتغير داخل كائن معين.

:: يشير أ وظيفة الطبقة أو متغير الطبقة.هذا مشابه جدًا للدالة العامة أو المتغير حيث لا يوجد ضمني $this مرجع.كل مثيلات تلك الفئة تشترك في تلك الوظيفة أو المتغير.

"الديناميكي" سيكون وصفًا أكثر دقة لـ، على سبيل المثال، التحميل الزائد PHP حيث يمكنك إنشاء متغيرات "ديناميكيًا"، على سبيل المثال، باستخدام الطرق السحرية __get() و __set() (والتي يتم استدعاؤها عند محاولة الوصول إلى خاصية لا يمكن العثور عليها؛يمكنك زيادة تحميل هذه الأساليب للتظاهر بوجود العضو المطلوب).

نصائح أخرى

نقلا عن صفحة ثابتة في PHP دليل :

معلنا الدرجة خصائص أو أساليب كما ساكنة يجعلها في متناول دون الحاجة إلى إنشاء مثيل من الطبقة.خاصية أعلن ثابت لا يمكن الوصول إليها مع إنشاء مثيل كائن الفئة (على الرغم من أسلوب ثابت يمكن).

لاحظ أيضا أنه عند إعلان الملكية ثابتة ، سوف يكون هناك نسخة واحدة فقط من هذه الممتلكات على النص كاملا :أساليب ثابتة/خصائص "العمل على مستوى الصف وليس على سبيل المثال المستوى" (نقلا عن ويكيبيديا).


حول مزايا وعيوب, انها قليلا من الصعب الإجابة بوضوح ، تلك هي فقط لا نفس...

السؤال هو :ماذا تحتاج ؟

إذا كان لديك كائن الذي يحتوي على بيانات تريد أساليب التعامل مع تلك البيانات سوف تستخدم ديناميكية الخصائص والأساليب.

من ناحية أخرى, إذا كنت ترغب فقط في استخدام الطبقة الحاوية على طرق التعامل مع البيانات الخارجية (أي ليس الداخلية إلى فئة), ، ربما عليك استخدام أساليب ثابتة.
على سبيل المثال, أنا في بعض الأحيان باستخدام أساليب ثابتة كما wrappers المكتبات التي لا تصدير الموجهة وجوه API :لأنها تتيح لي أن أتصل واحد class::method, بدلا من عدة وظائف.


قد يقول البعض أن "ميزة" من أساليب ثابتة هو أنك لا تحتاج إلى instanciate فئة لاستخدامها -- وهذا هو الصحيح ؛ ولكن هذا يعني أيضا أن كنت لا تحصل على الكائنات ، مع أساليب العمل عليها.حسنا :كما قلت ، وذلك باستخدام ثابت أو لا يعتمد على ما تحتاج إليه.

كدت أنسى :إذا كنت على استعداد لاستخدام وحدة اختبار, قد تجد أن أساليب ثابتة ليست سهلة الاختبار ؛ وعلى سبيل المثال ، أساليب ثابتة هي الموت الاختبار.

و خصائص ثابتة (نفسه مع المفرد و التسجيل أنماط التصميم التي تعتمد على خصائص ثابتة/طرق) نوع من يعني "الدولة العالمية" ، مثل "المتغيرات العالمية" - التي بعضها لا يشبه ^^

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top