TIME
11:42 م
الاثنين، 14 سبتمبر 2015
TIME
11:22 م
تنصيب ال Asterisk 13 وال PJSIP في CentOS
أولا
كالعادة نقوم بتنصيب الأدوات والمكتبات
الضرورية للاسترسك
yum
install automake bluez-libs-devel bzip2 corosynclib-devel gcc
gcc-c++
git gsm-devel jansson-devel libcurl-devel libedit-devel libical-devel
libogg-devel libsrtp-devel libtool-ltdl-devel libuuid-devel
libvorbis-devel libxml2-devel libxslt-devel lua-devel mariadb-devel
nano ncurses-devel neon-devel net-snmp-devel newt-devel
openldap-devel openssl-devel perl popt-devel postgresql-devel
speex-devel sqlite-devel subversion unixODBC-devel uuid-devel wget
السبت، 13 يونيو 2015
TIME
4:04 ص
TIME
12:42 ص
كيفية تنصيب حزمة lamp (php-mysql-http ) في سيرفر centos
هذه
الخطوات تتطلب أن
تكن في صلاحية root
خادم
الاباتشي هو برنامج مفتوح المصدر تستخدمه
حوالي 50%
من
الخوادم حول العالم
لتنصيب
الاباتشي أكتب في سطر الأوامر
yum
install httpd
عندما
يتم الانتهاء من تنصيب الاباتشي قم بتشغيله
من خلال الأمر التالي
sudo
service httpd start
و
حتى تتأكد من تنصيب الخادم أكتب ip
السيرفر في متصفحك
الأربعاء، 27 أغسطس 2014
TIME
8:05 ص
الخميس، 21 أغسطس 2014
TIME
3:08 ص
Object Oriented PHP
تطرقنا في ألتدوينه
السابقة إلى موضوع oop وقلنا انه أسلوب
برمجي لوضع مجموعة من الخصائص والمهام في كائنات class
ويساعدنا ذالك في إعادة استخدام الكود وتفادي التكرار وابقي في ذهنك قاعدة (don't repeat yourself (DRY وألان سنتناول المفهوم في لغة php.
إذن الكائن هو الذي
نجمع فيه الخصائص المتشابه في مسمى واحد في صفحة الكود يسمى كلاس وعندما ننشى من
عنصر يسمى اوبجيكت لاحظ الكود التالي
<?php
Class car{
Public
$CarName;
Public $CarColor;
Public function speedup(){
Echo "run";
}
}
?>
سنتطرق ل public لاحقا
دعونا في الكود السابق عرفنا class أسمه carعرفنافيه CarName$ إسم السيارة وCarcolor$ لون السيارة لم نقم
بشيء جديد هنا
<?php
$toyta =new car();
?>
في الكود السابق أنشأنا object أسمه تويوتا من النوع car ولان نريد الوصول إلى خصائص object او السيارة نصل إلى العناصر الخاصة بالobject عن طريق الكتابة <– ثم اسم العنصر سوأ كان خاصية أو دالة سوأ أردت إعطائه قيمة للخاصية أو أردت استرجاعها أو عرضها كما في الكود التالي
$toyta->CarName;
الآن أريد أن أعطي
للسيارة لون وأسم
$toyta->CarName="camre";
في الكود السابق قمنا
باستدعاء الخاصية Carname وخزنا فيها أسم السيارة كامري وألان أريد عرض إسم السيارة
echo $toyta->CarName;
النتيجة
camre
functions
الدوال هي بلوك يوضع
الكود البرمجي داخلها ليتم استعماله في عدة مناطق و بأشكال مختلفة فقط بمجرد كتابة
أسم الدالة و يتم تعريف الدالة كألتالي
Function functionname (){
Function body
}
وبالطريقة التالية يتم استدعاء الدالة Functionname أسم الدالة
functionname ();
و إليك المثال
Function sayehello(){
Echo " hello ";
}
Hi ahmad sayehello(); hi ali sayehello();
النتيجة
Hi ahmad hello hi ali hello
parameters
هي المتغيرات التي يمكن تمريرها للدالة أثنا التنفيذ وتنفيذ الكود على أساسها ويجب تعريفها عند تعريف الدالة
Function sayehello($name){
Echo ”hello ”. $name;
}
كما ترى قمنا بتعريف
برميتر في أقواس الدالة و استخدمناه داخل
الكود البرمجي ولان كل ما نكتبه في المتغير name$ سيقوم بعرضه إلى جانب كلمة hello طبعا في php يتم دمج النصوص باستخدام النقطة.
$name=”ahmad”;
sayehello($name);
او كتابة القيمة
مباشرة
sayehello('ahmad' );
النتيجة
Hello ahmad
يمكن تمرير أكثر من برميتر
<?php
Function sayehello($name,$name2,$name3){
Echo ' hello '.$name;
Echo ' hello '.$name2;
Echo ' hello '.$name3;
}
sayehello("musta","ahmade","ali");
?>
النتيجة
hello musta hello ahmade hello ali
أما إذا أردنا أن
يكون البرميتر في حالة عدم تمريره فارغ فعليك تعريفه فارغ وإلا سيحدث خطأ
Function sayehello($name=null){
echo 'hello '. $name;
}
null تعني فارغ بهذه
الطريقة يمكنك تمرير قيمة أثنا التنفيذ أو تركها فارغة
كما يمكنك تعريف عدد
غير متناهي من البرميترات وذالك بتمرير مصفوفة
كما سنأخذ في الدروس القادمة
بعد أن قمنا بشرح
الدوال نأتي استخدامها داخلclass
بنفس طريقة المتغيرات
يمكن استدعاء الدوال من الobject و يتم
تنفيذ الدوال فور استدعائها
أنظر الكلاس car هنالك
دالة بداخله تقوم بطباعة كلمة run على الشاشة
$toyta->speedup();
النتيجة
Run
وبنفس الطريقة يمكن كتابة متغيرات داخل الدالة لنعد تعريف الدالة بحيث تستقبل متغيرات
<?php
Class car{
Public $CarName;
Public $CarColor;
Public function speedup($speed){
Echo " run ".$speed;
}
}
?>
النتيجة
Run 100
الوراثة (Inheritance):
نأتي لواحدة من أهم مفاهيم الoop وهي الوراثة وهي ببساطة تعني نسخ جميع خصائص و دوال الكلاس إلى كلاس أخر وتتم الوراثة
بالطريقة التالية
<?php
Class a{
}
Class b extends a{
}
?>
الكلاس a هو الكلاس
الاب والكلاس b هوالكلاس الابن أو المورث وللان يتم نقل كل ما يوجد داخل الكلاس
الى الكلاس ببساطة وألان لنطبق على الكلاس car
<?php
Class toyto extends car{
Public $Companyname;
Public function getCompanyname(){
echo 'toyta';
}
}
?>
لقد قلنا أن أننا
ننسخ جميع الدوال والخصائص من الكلاس الاب الى الكلاس الاإبن وألان جرب
$newcar= new toyto();
$newcar->speedup('200');
النتيجة
run 200
لاحظ أن الدالة speedupغير موجودة فى الكلاس toyto ولأكن يتم تنفيذها عند إستعائها من الكلاس بسبب الوراثة تم نسخها إلى الكلاس toyto
اعتقد ان الصورة قد وضحت
public , protected , private
ولان نأتي لكلمة public إنظر المثال التالي
Class car{
Public $CarName='camre';
}
ولنفترض انك لا تريد أن يتم الوصول إلى الخاصية بهذه الطريقة
$toyta=new car()
echo $toyta->CarName;
لأنه بهذه
الطريقة يمكن تغير قيمة بكل سهولة
$toyta->CarName='anothername';
إذن فالوصول إلى هذه القيمة بهذه الطريقة غير امن
حتى عند الوراثة عندما يرث أي كلاس من الكلاس كار يمكن للكلاس
الوارث إستخدام الخاصية و التعديل عليها بكل سهولة أنظر الكود
التالي
Class toyto extends car{
Public $combanyname;
Public function getcombanyname(){
Echo 'toyta';
}
}
$newcar =new toyto();
echo $newcar->carname;
النتيجة
Run
إذن بالتاي كلمة ببليك تعنى أن الجميع يمكنهم استخدام هذه الخاصية أو
الدالة خارج الكلاس ,هل يمكن تقيد الوصول إلى الخواص والدوال داخل الكلاس
بالطبع ولان أكتب كلمة protected بدل ببليك
<?php
Class car{
protected $CarName;
Public $CarColor;
public function speedup(){
echo 'run ';
}
}
?>
النتيجة
Fatal error: Cannot access protected property car::$CarName in C:\xampp\htdocs\tesr\index.php on line 17
ولان جرب استخدامها خارج الكلاس الموروث نحصل على نفس النتيجة
إذن خاصية بروديكن
تعني انه لا يمكن استخدام خارج الكلاس سوأ كان الأب أو الابن
ولنفترض انك تريد أن
تستخدمها داخل الكلاس فقط وألا تورث إذن عليك استخدام
private
عندما نكتب برنامج
حقيقي يجب عليك استخدام
private
او protected حسب الاحتياج والدوال عادة ما تكون public
س:إذا كنت تريد
استخدام احد الخصائص المحمية خارج الكلاس ماذا افعل
Setter & Getter
كما قلنا سابقا عندما
تعمل على مشروع فليس من الحكمة ان تعطى لمتغير خاصية public ولاكن ماذا إذا أردت أن
تستخدم متغير محمي خارج الكلاس ببساطة أستخدم دالة public
أنظر إلى الكود
التالي
<?php
Class car{
private $CarName='camrey';
public $CarColor;
public function getcarname(){
Return $this->CarName;
}
public function speedup(){
echo 'run ';
}
}
?>
خلينا من this$ والآن في الدالة getcarname طلبنا منه إرجاع
المتغير CarName جرب تنفيذ الدالة
النتيجة
camrey
لقد كتبنا داله ترجع لنا قيمة المتغير المحمي من دون تعريضه للخطر وهذه احد أهم مفاهيم الoop وهو التغليف أي اننا جعلنا التعامل مع المتغير من خلال دالة
ولأكن ماذا إذا كنا
نريد أن نسند لها قيمة من خارج الكلاس
بنفس الطريقة
أكتب دالة تستقبل برميتر يتم إعطائه للدالة
<?php
Class car{
private $CarName;
public $CarColor;
public function getcarname($name){
Return $this->CarName=$name;
}
public function speedup(){
echo 'run ';
}
}
?>
لاحظ ستعدنا الدالة و
أسنادنا قيمة إليها لذالك سمية دوال الستر والجتر
this$
نأتي إلى ال ذيس
إذا كنت تكتب داخل
دالة داخل كلا س وأردت استخدام carname ماذا تفعل
ببسطة أستخدم this ثم إسم
الدالة يعنى this تمكننا من استخدام محتويات الكلاس الذي نحن فيه أو تعني الكلاس نفسه.
Constructors
دالة التمهيد أو دالة
البناء
يوجد في أي كلاس دالة
تسم Constructor تستدعى عند إنشاء الابجيكت
تبقى فارغة إذا لم تكتبها
تكتب في Constructor ما
تريد تنفيذه أثنا إنشاء الابوجيكت تاخذ دالة Constructor نفس إسم الكلاس او __construct() تفضل الاخير لانع ربما تحتاج لتغير إسم الكلاس وعنداه تحتاج لتغير إسم الكونستركت
دعونا نكتب
Constructor للكلاس كار
<?php
Class car{
private $CarName;
function __construct($carname){
$this->CarName=$carname;
}
Public function getcarname(){
Return $this->CarName;
}
}
$toyta= new car('camrey');
echo $toyta->getcarname();
?>
في المثال السابق
طلبنا من Constructor إسناد القيمة التي سنمررها عند إنشاء الاوبجيكت لcarname
قد يبدو بدون قائده ولأكنه مفيد جدا ولنفترض ان بيانات السيارات
مخزنة في قاعدة بيانات كرقم السيارة و لون والماركة
إذا أردة إنشاء
الاوبجيكت بطريقة اوتماتيكية كل ما عليك
هو تمرير ال ip إلى Constructor و سيقوم بستخراج خصائص السيارة و إسنادها إلى
المتغيرات
س: في حالة الوراثة
كيف يتم نسخ Constructor
ببساطة يمكنك استخدام
Constructorالاب وإعادة إستخدامه داخل Constructor الجديد بالطريقة التالية
<?php
Class newcar extends car{
Function car(){
parent::__construct();
echo “new constract”;
}
}
?>
destruct
كما ان
الكونستركت يستدعا عند إنشاء الاوبجيكت فأن
إليك المثالdestruct
يستدعا عند إنها الاوبجيكت <?php
Class car{
private $CarName;
Function __constrcontr($carname){
$this->CarName;
}
Public function getcarname(){
Return $thist>CarName;
}
Function __destrcontr($carname){
$this->CarName=null;
Echo ‘finsh job’;
}
}
?>
كما ترى قمنا بتفريغ
المتغيرات وطباعة finsh job تستخدم دالة الهدم لمساعدة php لتفرغ القيم
كما إنهاء مهمة في حالة فتح اتصال مع قاعدة البيانات يمكنك إغلاق الاتصال بقاعدة
البيانات في
destruct
Static
الخاصية ستاتيك
تستخدم عندما تريد أن تشارك المتغير مع اي ابوجيكت تنشئه من الكلاس ركز معي ستاتيك تعنى انه ثابت وليس غير قابل للتغير حيث
أنه يمكن تغير قيمته
أنظر الكود التالي
Class car{
Public static companyName='toyota';
}
يتم استدعائه القيمة
بدون إنشاء اوبجيكت بهذه الطريقة
Echo car:: companyName;
وإذا تغيرة قيمة
المتغير ستاتيك في أي مكان ستتغير في بقية
الاوبجيكت وهذا ما تعنيه مشاركة.
كما يمكننا جعل المتغيرات ثابتة يمكننا جعل دوال ثابتة ولأكن أنتبه عندما نكتب دالة ستاتيك لانكتب this بداخلها لأنه لا يوجد object بداخلها فهي تستدعى من دون إنشاء اوبجيكت ستفهم فائدتها عندما تفهم معنا كلمة "قوانين ثابتة" مثل قانون مساحة الدائرة آو قانون مساحة المربع
وفي كلاس السيارة
مثلا قد نحتاج لقانون مثلا لحساب سرعة السيارة
<?php
Class car{
private $CarName;
static function carspeed($Distance,$time){
return $Distance/$time
}
}
Echo Car:: carspeed(122,333);
?>
كانت هذه التدوينة تلخيص لمفهوم الoop بلغة php ولايزال هنالك مفاهيم متقدم فى ال oop سنناقشها في تدوينات قادمة نلتقى في تدوينة اخرى إنشاء الله.
الاشتراك في:
الرسائل
(
Atom
)