اريد ان انادي علي function داخل class و لا تريد ان تعمل
class cat {
function writeMsg() {
echo "Hello world!";
}
writeMsg();
}
اريد الكود داخل الكلاس وشكرا
لقد قمت بتسمية الكلاس باسم cat وهذا مخالف لما اتفق عليه المبرمجين ان يكون اسم الكلاس يبدأ بحرف كبير فالأصح هو Cat.
تنفيذ الدالة writeMsg تلقائيا داخل الكلاس يكون عن طريق الكونستركتر Constructor لاحظ هذا المثال :
لاحظ اننا وضعنا الموديفاير Modifier الخاص بدالة الكتاب كـ private حتى ينحصر الولوج اليها فقط من داخل الكلاس.
لاحظ اننا قمنا بانشاء نسخة Object من الكلاس خارجها لكي نجعلها تعمل. عندما عمل النسخة يتم استدعاء الكونستركتر تلقائيا الذي بدوره يقوم باستدعاء دالة الكتابة.
يبدو ان لديك مغالطات كبيرة في OOP انصحك بأن تعيد قراءة هذه المواضيع بدقة.
انظر للمثال :
class Cat {
public function __construct() {
$this->writeMsg();
}
private function writeMsg() {
echo "Hi" ;
}
}
$myClass = new Cat();
<?php
class Cat {
public function writeMsg() {
echo 'Hello World';
}
}
$myClass = new Cat();
echo $myClass-> writeMsg();
?>
لديك خطأ وهو انك قمت بعمل echo بشكل مزدوج مرة داخل الدالة ومره عند استدعائها. يجب ان تمسح الاخيرة.
طريقتك ممكنة ايضا , اذا كان الاخ يفضل الاستدعاء الخارجي لذلك فعليه في هذه الحالة كما فعلت انت ان يقوم بتغيير الموديفاير إلى عام public حتى يكون من الممكن استدعائها من خلال الكائن Object.
نعم كلامك صحيح
لكن الأخ كل ما طلبه أنه أراد فقط معرفة كيفية استدعاء الدالة من داخل الكلاس
لذلك لم انتبه للتفاصيل بدقة واضح الأخ في بداية مشواره مع الكلاسات
ايضاً من الممكن أن الأخ لم يتعرف حتى الآن على الكونستراكت والبرافتي
كما تعرفها أنت ، هو سيتعلم هذه الأشياء بالتدرج ، فلماذا تصعب الأمور على الأخ
هو كل ما أرد معرفة طريقة استدعاء الدالة من داخل الكلاس ولم يسأل عن الكونستراكت أو شيء اخر
فلما تصعب عليه الأمور
مع خالص تحياتي
ليس تصعيبا. في تعلم البرمجة الكائنية يعتبر الكوسنتركتر من الاساسيات التي ينبغي تعلمها والتي تسبق العملية التي تفضلت انت بها.
نعم صحيح هو من الأساسيات ولكن أنا شخصياً قمت بالإجابة على السؤال في حدود السؤال هو سأل عن كيفية الوصول للدالة فقط من داخل الكلاس وأنا قمت بإجابته فهذه طريقتي في الإجابة دائماً ولا احب أن اجيب بأكثر من حدود السؤال
اعلم بأنك أردت أن تفيده بخبرتك وجزاك الله خيراً ولكن بالنسبة لي كما قلت أنا لم اركز في نفس الأمور التي ركزت عليها فأنا لا اعلم إذا كان هذا الشخص أمامي لديه نفس المعرفة التي لدي وربما هذه كانت أو تجربة له في التعامل مع الكلاسات لذلك كانت إجابتي في حدود معرفته باللغة ولم احب أن اصعب الأمور وهذا كل شيء
مع خالص تحياتي
التعليقات