الدرس الاول : أساسيات هامة في php classes







عوده من جديد زوار موقعنا الكرام, أعتذر عن التأخير فى كتابة دروس البرمجة , نظرا لضيق وقتى هذه الفترة, وان شاء الله سأحاول بقدر الأمكان أن أنجز بشرح شىء جديد خلال هذه فترة , ليكون بداية لمشروع الخريطة البرمجية الذى أخبرتكم به..., وحتى أبتعد عن التكرار, فمشروع الخريطة البرمجية سوف أقوم بتجهيزه من نهايته لاوله , وليس العكس, اى ستجدنى أقوم بإدراج الدروس الخاصه بالخريطة بدءا من الدروس المتقدمه جدا رجوعا للدروس الأوليه , حتى يكون هناك جديد لكل من يريد الاستفاده من هذه الخريطة أول بأول لحين انتهى من تجهيز كافة دروسها,

طبعا الدروس هذه المره سيتم طرحها بشكل مختلف تماما عن الدروس السابقة , لان الخريطة بمجرد تنتهى تماما ان شاء الله , سوف تكون لك قدرة برمجية فائقه بأذن الله وعن ثقه . ولفكرة ستكمن فى طريقة العرض للخريطه التى سأشرح فكرتها بأذن الله فى موضوع منفصل. فى هذا الدرس سوف نتعرف على واحد من الاشياء المهمه فى الphp, وهى الكلاسات classes نظرا لقلة الدروس المتعلقة بها, سوف يكون لها حظ وفير جدا فى موقعنا, بحيث نتقن التعامل معها بشكل جيد ونبدأ بأول درس فى php classes وهو الأساسيات :

أولا: صوره للفهرس الخاص بالدرس والذى سنقوم بشرحه خطوه خطوه بأذن الله:

اولا: class:

 تعريف الكلاس class: هى عبارة عن مجموعة من المتغيرات $ والfunctions , يتم استخدامها سويا, بحيث ينتج لنا ما يسمى الكلاس, والتى توفر الكثير من الوقت, فهناك كلاسات جاهزه يستخدمها الكثير من المبرمجين فى برمجياتهم , فمبجرد معرفتهم بأساسيات استخدامها, وهذا ما سنشرحه, يمكنك أن تستخدم اى كلاس تريدها, وحتى ولو لم تكن مبرمج محترف وقادر على كتابة اى كلاس , فهى ستعطى لك دفعه برمجية قويه فى برمجياتك اذا كانت قدراتك محدوده فى البرمجه مثال: مثلا يوجد كلاس اسمها كلاس قواعد البيانات , وكودها موجود هــنـــا , وهى عبارة عن كلاس يتم استخدامها للتعامل مع قواعد البيانات , من اتصال وجلب وادراج وحذف وادخال بيانات.......الخ تخيل انك بمعرفه بسيطه بأساسيات الكلاسات, ستتمكن استخدام هذا الملف الذى قد يكون معقد بالنسبة لك بكل سهولة, وهذا ما سيثبته درسنا ان شاء الله , والدروس القادمه بأذن الله

 الصيغة العامه للاستخدام :

رمز Code:
class classname {
$.......
function........

}

مثال عملى: نفرض انى أريد عمل كلاس تستخدم لكتابة اسمى : سيكون الكود كالاتى:

رمز Code:
 <?php
 class myname {
    
    function myname(){
        
        echo "my name is mohamed amin\n";
        echo "<br>";
    }
 }

?>

الان , سوينا هذه الكلاس البسيطة جدا, لكن نريد ان نعرف كيف سنستخدمها حتى نظهر الجملة my name is mohamed amin

حتى نقوم بذلك لابد ان نقوم بخطوتين: 1-عمل متغير وتحديد هذا الكلاس لاستخدامها باستخدام الكلمة new 2-الدخول لاى function او متغير$ داخل الكلاس لاستخدامه باستخدام علامة الدخول -> سنقوم بعمل الخطوه الاولى: نسمى اى متغير ونكتب الكلمة new + اسم الكلاس السابق

رمز Code:
$use=new myname;

الحين قمنا بعمل متغير وحددنا الكلاسmyname لاستخدامها نقوم الان بعمل الخطوه الثانيه : نكتب نفس اسم المتغير اللى مستخدم الكلاس+ ندخل للفانكشن myname باستخدام ->

رمز Code:
$use->myname();

الان لو كتبنا الكود كامل : الكلاس +new + ->

رمز Code:
 class myname {
    
    function myname(){
        
        echo "my name is mohamed amin\n";
        echo "<br>";
    }
 }

$use=new myname;
$use->myname(); 

?>

لو استدعيت الملف فى المتصفح, ستجد الجمله راح تظهر لك my name is mohamed amin حتى نهضم هذه الجزئيه , نأخذ أكثر من مثال عملى ....... مثال عملى 1:

رمز Code:
<?php

class personal {
    
   public $site="www.advphp.com";
    
    function fullname(){
        
        echo " my private site is {$this->site} ";
    }
    
}

$usepersonal= new personal ;
$usepersonal->fullname();

?>

الناتج:

رمز Code:
my private site is www.advphp.com

استفدنا من المثال السابق, انه فى حال أردت الدخول لاى متغير او فانكشن يمكنك استخدام الجملة

رمز Code:
$this->var

حيث var هى اسم المتغير المراد الدخول له, ولاحظ اننا لن نكتب العلامة $ قبل اسم المتغير مثال عملى 2 :

مثال علملي 2

رمز Code:
<?php

class simplemath {
    
   public $num=18;
    
    function math(){
        $num2= 2;
        $sum = $this->num + $num2;
      echo " the sum of $this->num and $num2 is $sum  ";
    }
    
}

$usepersonal= new simplemath ;
$usepersonal->math();

?>

الناتج :

رمز Code:
the sum of 18 and 2 is 20

ثانيا: extends الextends

 بكل اختصار هى تكملة او اضافة ممكن تضيفها لاى كلاس, تخيل انك كاتب كلاس كبيره جدا ومعقده, ونفرض انك تود ان تضيف لها بعض السطور البرمجية بدون الدخول فيها, لذلك سنقوم بعمل كلاس جديده امتدادا للكلاس الاصلية بحيث تشمل هذه الكلاس الممتده الكلاس الاصلية بكافة أوامرها+الكلاس الجديد بكافة أوامرها...

 الصيغه العامه للاستخدام:

رمز Code:
class classname2 extends classname1 {
$........
function..........
}

مثال عملي :

لو خدنا الكلاس السابقة والتي كودها هو

رمز Code:
class myname {
    
    function myname(){
        
        echo "my name is mohamed amin\n";
        echo "<br>";
    }
 }

$use=new myname;
$use->myname();

نريد ان نضيف للكلاس السابق كلاس ممتد لها ليظهر اسمى المستعار الثانى لذلك سيكون الكود كالاتى:

رمز Code:
class secondname extends myname{
    
    function displaysecond(){
        
        echo "second name is vista-design";
    }
}
 
 $useextend= new secondname();
 $useextend->displaysecond();

الناتج لهذا الكلاس سيكون الاتي

رمز Code:
my name is mohamed amin
second name is vista-design

شوفت الناتج: يشمل الكلاس الاصلية +الكلاس الممتده

ثالثا: constructors :

 ال constructors , او المشيد , هى اول function يتم كتابتها فى الكلاس, والتى يتم استدعاءها تلقائيا بدون استدعاءها وتنفيذها بمجرد استخدام الكلاس ...... الصيغة العامة:

رمز Code:
class classname {

function __construct() {

}

}

الحين حتى نثبت انه يتم استدعاءها تلقائيا بدون ان ندخل -> للfunction , سنقوم بعمل كلاس بسيطه وسنقوم بعمل متغير جديد لاستخدام هذه الكلاس فقط, ونشوف الناتج...

رمز Code:
class useconstructor{
    
    function __construct(){
        echo "<br>";
        echo "this is the constructor function";
    }
}

$useconstructor= new useconstructor();

الناتج :

رمز Code:
this is the constructor function

لاحظ اننا لم نستخدم عبارة الدخول للfunction كالاتى:

رمز Code:
$useconstructor->construct();

لان هذه الفانكشن يتم استدعاءها بمجرد عمل متغير لاستخدام الكلاس

رابعا: visibility:

ال visibility فى الكلاسات, يقصد بها تصاريح استخدام ما بداخل الكلاس, فهناك 3 أنواع من التصاريح : 1- public: وهو التصريح العام, والذى يصرح لاستخدام الكلاس من اى مكان سواء داخل او خارج الكلاس 2- protected: ويقتصر على استخدام الكلاس من خلال الكلاسات المتوارثه فقط (الممتده) 3-private: وهو التصريح الخاص المقتصر فقط على استخدام الكلاس نفسها فقط

الصيغة العامة :

رمز Code:
class classname {
public $var="";
protected $var="";
private $var="";

}

مثال عملي :

رمز Code:
class visibile{
    
    public $public='public';
    protected $protected='protected';
    private $private='private';
    
    
    function usevisible(){
        
        echo $this->public;
        echo $this->protected;
        echo $this->private;
        
    }
}

 
 $vis= new visibile();
 echo $vis->public; // works
 echo "<br>";
 echo $vis->usevisible();

الناتج :

رمز Code:
public
publicprotectedprivate

خامسا: scope resolution operator :

الSRO هى خاصية فى الكلاسات تستخدم للاشارة لمتغير $ او function داخل كلاسا ما, ولابد ان يكون المتغير حتى نشير له ان يكون ثابت static

مثال عملي :

رمز Code:
class myname2 {
    
    public static $thename="mohamed amin";
    
    function declarescope(){
        
        echo  self::$thename;
    }
    
     }
 
 $use= new myname2;
 $use->declarescope();

الناتج :

رمز Code:
mohamed amin

سادسا: constant:

 وهو المتغير الثابت فى الكلاس, الذى قيمته لن تتغير اينما اردت استخدامه من الكلاس

الصيغة العامة :

رمز Code:
class classname{

const varname="";

}

حيث الvarname هى اسم المتغير, ولاحظ اننا لم نحلق المتغير بالعلامة $

الصيغة العامة :

رمز Code:
class myclass{
    
    
    const somevar="my website is advphp.com"; 
    
    function useconstant(){
        
        echo self::somevar;
    }
}

echo myclass::useconstant();
echo "<br>";
echo myclass::somevar;

الناتج

رمز Code:
my website is advphp.com
my website is advphp.com

بهيك , نكون انتهينا من ما يخص الكلاسات من أساسيات مهمه للدروس القادمة , والدروس القادمه ستكون تكثيف قوى فى الكلاسات, بحيث سنعرض أكثر من كلاس ونشرحها سويا, مع استغلالها بالكامل, بحيث نكون هضمنا موضوع الكلاسات سويا بشكل جيد ملاحظه: حتى تتذكر كافة أساسيات الكلاسات: لقد قمت بعمل ملف بسيط به كافة أكواد الاساسيات والأمثلة العملية مجمعه سويا,

الكود

رمز Code:
<?php

//////////////////////////
# class file learning
# done by vista-design
# www.advphp.com
///////////////////////////

 //php4: to demonstrate the class constructor that automatically loaded
 

 class myname {
    
    function myname(){
        
        echo "my name is mohamed amin\n";
        echo "<br>";
    }
 }

$use=new myname;
$use->myname(); // u will find that the echo is doubled as the function has the same name of the class,so it consider a constructor function not a regular function




/////////////////////////////////////////////
#extends
////////////////////////////////////////////

/* class secondname extends myname{
    
    function displaysecond(){
        
        echo "second name is vista-design";
    }
}
 
 $useextend= new secondname();
 $useextend->displaysecond(); // this will print (my name is.... +  second name is....)
 */
 
/////////////////////////////////////////
 
 
/////////////////////////////////////////////
#autoload
////////////////////////////////////////////
 
 //auto loading of certain class from afile
 
 /*function __autoload($classname){
    
    require_once $classname. '.php'; 
 }
 
$useclass = new myclass1();
$useclass = new myclass2(); */

/////////////////////////////////////////////
#construcotrs
////////////////////////////////////////////

/* class useconstructor{
    
    function __construct(){
        echo "<br>";
        echo "this is the constructor function";
    }
}

$useconstructor= new useconstructor(); // as u see the function will load automatically without accessing using $this
*/


///////////////////////////////////////////
#visibility using public protected private
//////////////////////////////////////////

/*
class visibile{
    
    public $public='public';
    protected $protected='protected';
    private $private='private';
    
    
    function usevisible(){
        
        echo $this->public;
        echo $this->protected;
        echo $this->private;
        
    }
}

 
 $vis= new visibile();
 echo $vis->public; // works
 echo "<br>";
 echo $vis->usevisible();
 

 */
 
 ////////////////////////////
 # scope resolution operator :: allows access to static, constant, and overridden members or methods of a class.
 ///////////////////////////
 
 /*
 class myname2 {
    
    public static $thename="mohamed amin"; // should be static if u want to use ::
    
    function declarescope(){
        
        echo  self::$thename;
    }
    
     }
 
 $use= new myname2;
 $use->declarescope();
 
 */
 
 ////////////////////
 #constant: don't use the $ symbol to declare or use them ,
 #The value must be a constant expression, not (for example) a variable, a class member, result of a mathematical operation or a function call.
 ///////////////////
 

class myclass{
    
    
    const somevar="mohamed amin"; // don't do $somevar
    
    function useconstant(){
        
        echo self::somevar;
    }
}

echo myclass::useconstant();
echo "<br>";
echo myclass::somevar;
 
 
 
?>

انتهي


http://www.traidnt.net/vb/traidnt1769945


  :