متغير PHP من الفئة الممتدة
سؤال
أحاول استرداد متغير من فئة ممتدة. هكذا يبدو صفي الرئيسي:
class SS {
public $NONE = NULL;
public $NUMBERS = array("1", "2", "3", "4", "5", "6", "7", "8", "9", "0");
public $OPERATORS = array("=", "&&", ">", "<", "+", "-", "/", "*", "^");
public $DBLQUOTES = '"$1"';
public $SNGQUOTES = "'$1'";
public $CODE;
function SuperSyn($sCode, $cLang) {
$hLang = new VB6;
$VB6 = $hLang->__construct();
echo $VB6->ssAuthor;
}
}
ويبدو أن صفي الممتد مثل هذا (لقد قمت بإزالة العديد من الكلمات الرئيسية).
class VB6 extends SS {
public function __construct() {
$ssAuthor = "James Brooks";
$ssCSS = "languages/vb6.css";
$ssNumbers = $NUMBERS;
$ssKeywords = array("Abs", "Access", "AddItem");
$ssReserved = $NONE;
$ssComments = "('.+)";
$ssOperators = $OPERATORS;
$ssDoubleQuote = $NONE;
$ssSingleQuote = $NONE;
}
}
إذا قمت بإزالة الوظيفة العامة التي يتم استدعاؤها ، فإن الكلبات PHP تتوقع وظيفة.
المحلول
سيتم استدعاء المُنشئ لك عند إنشاء كائن ، لذلك يجب أن يعمل:
function SuperSyn($sCode, $cLang) {
$hLang = new VB6(); //I think you need some parameters here
echo $VhLang->ssAuthor;
}
ومع ذلك ، في مُنشئ VB6 ، تقوم حاليًا بتعيين المتغيرات المحلية فقط ، لذلك لن تتمكن من الوصول إلى SSAuthor خارجيًا. بدلاً من ذلك ، ربما تريد أن تفعل شيئًا مثل:
class VB6 extends SS {
public $ssAuthor;
public function __construct() {
$this->ssAuthor = "James Brooks";
//etc.
}
}
نصائح أخرى
استخدم الكلمة الرئيسية لـ PHP.
استعمال parent::
أو $this->
(يعتمد ، أي لديك متغيرين مع نفس الاسم)
أعتقد أن هناك مشكلة منطقية مع توقعك. لماذا يجب أن تعرف وظيفة الفئة SS عن متغير موجود فقط في الفئة الفرعية VB6؟
لن يكون هذا سلوكًا وراثة نظيفًا ويكشف عن مشكلة في فصولك.
خياران لحل ذلك:
- ضع المتغير في الفئة الرئيسية لاستخدامه في وظيفة في تلك الفئة
- ضع الوظيفة باستخدام متغير الفئة الفرعية داخل الفئة الفرعية
(بعد قراءة التعليقات حول الكلمة الرئيسية الأصل و ´ $ هذا المتغير: فهمت السؤال بشكل مختلف ولا أعتقد أن أيًا من تلك التي يجب أن تساعد لأن الاتجاه المعاكس مطلوب: وظيفة فئة الأصل> متغير الفئة الفرعية ، وليس وظيفة الفئة الفرعية> متغير فئة الوالدين)