مشاهدة النسخة كاملة : دالة الخاصية ( function )


Unix Com
11-17-2004, 05:30 AM
السلام عليكم

دراسة حول الدالة الخاصة او كما يقال الدالة الشخصية
معنى الكلمة function : اي وظيفة او عمل
وهي بداية تصريح اي دالة نقوم بكتابتها كي يتعامل معها محرك ال php مثل اي دالة معرفة لدية من الدوال الثابتة

مثال على دالة ثابتة <--- تسميتي لها مدري تعجبكم
برنامج
<?php

phpinfo();

?>




جرب وكتب هذه الدالة في ملف بامتداد php وقم بفتحة بالمتصفح

اغلب الدوال الثابتة يجب تمرير بار متر او اكثر
ما هو البارومتر المعني هنا
هو متغير تريد ان تختبره او تجري علية بعض الحسابات إذا كان رقميا او تنفيذ عدة أمور
هنا الدالة التي نصنعها تغنينا من تكرار العمل
مثلا

في نهاية هذه الصفحة وفي كل صفحة في هذا الموقع تجد
rafia-php , Powered by rafia v2.0, Copyright© 2003
انا لم أقم بكتابتها في كل ملف بهذا الشكل
فقط خمسة أحرف في اسفل كل ملف كل ذلك بواسطة الدالة التي كتبتها .... نأتي لتطبيق لنفهم اكثر
برنامج
<?php

function foot()

{

echo "<p align=center><font size=2>rafia-php , Powered by <a
target=_blank href=http://www.rafiaphp.com>rafia</a>

v2.0, Copyright© 2003 </font> </p>";

}

?>




هذه هي الدالة وظيفتها تطبع حقوق البرمجة في اسفل كل صفحة او ملف
كيف استدعي هذه الدالة في اسفل الملفات
إذا كانت هذه الدالة في ملف آخر ولنفرض functions.php
ونريد ان تظهر هذه الدالة في الملفات الآتية
index.php , guestbook.php , download.php .... باقي الملفات
ندرج الملف الذي توجد بداخلة الدالة في كل هذه الملفات
على سبيل المثال
برنامج
<?php include('functions.php');?>




هذه الجملة مكتوبة في السطر الأول من جميع الملفات
ثم نذهب للمكان الذي نريد ان يتم طباعة ما بداخل الدالة فيه ونستدعي الدالة بهذا الأسلوب
برنامج
<?phpfoot();?>




انتهينا <--- فقط من المثال
نعود لإنشاء دالة تقوم بعمل اكثر فائدة ومنها نتعرف على طريقة تمرير البارومترات . لنفرض اني اريد ان اصنع خمسين رابط لموقع او لملف في موقعي هل أقوم بكتابة ذلك خمسين مرة ؟... بطبع لااااااا
اصنع الرابط الأول بشكل الذي نحب وقبل ان نضعه في دالة ننظر ما هي المتغيرات التي سوف ننفذ عليها هذه العملية
نجد انها اثنان اسم الموقع او الملف وعنوانه وعلية نصنع الدالة
برنامج
<?php



function html_URL($url, $name)

{



echo "<img border=0 src=ima/left.gif width=6 height=9><a
href=$url>$name</a>
";



}

?>





هذه هي الدالة التي تقوم بما طلبنا رابط لموقع او لملف في موقعي او لبرنامج في موقع الجيران في أي مكان تصنع لك رابط

كيف نستدعي هذه الدالة وما معنى المتغيرات التي بداخلها
قبل كل شيء دعونا نفهم التركيبة لها Function إبلاغ محرك ال php ان هذه دالة قمنا بإضافتها html_URL هذا هو اسم الدالة الذي اخترناه على كيفنا ولاحظ ان الجزء الثاني من التسمية بالحروف الكبيرة هذا لا يعني شيء عند الاستدعاء لها لانه يعتبر اسم مثل اسمي مثلا Rafia او قلت rafia
بعد ذلك البارومترات الأول يعبر عن الرابط او عنوان الموقع والثاني عن تسميته ثم إنشائنا كود بلغة html ووضعنا المتغير الأول مكان الرابط والمتغير الثاني اسم لهذا الرابط , وبعض الجماليات مثل الصورة وتعتبر ثابتة تطبق مع كل رابط <- سبق ووصلتني رسالة على البريد من مجهول يقولي شرحك ممل ... أحد حس بملل ؟
المهم نرجع لموضوعنا
كيف نستدعي دالتنا السابقة
بهذا الأسلوب
برنامج
<?php

html_URL("index.php", "صفحة البداية");

?>




مثال بالنقليزي أوضح
برنامج
<?php

html_URL("index.php", "Home");

html_URL("news.php", "News");

html_URL("http://www.tanateaf.com/", "TaNaTeaF");

?>




في كل مرة تقوم الدالة بإنشاء وضيفتها كما كتبنا في تصريحها

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

برنامج
<?php



function font($rafia) {

global $fontcolor2, $fontface2, $fontsize2;

echo " <font face=$fontface2 size=$fontsize2
color=$fontcolor2>$rafia</font> ";

}

?>




دالة كتبناها لنمررها على البارومتر $rafia وتقوم بتعيين الخط لهذا المتغير لكن لو لاحظنا ان نوع الخط عبارة عن متغير !! وأيضا حجمه
و أخيرا لونه كل هذه متغيرات . هذه المتغيرات معرفة خارج الدالة ولكي نحدد ان هذا المتغير له مدى عمومي استخدمنا الكلمة global
باختصار نستخدم الكلمة global مع المتغيرات ذات المدى العمومي

وهذا مثال لمتغير صرحناه داخل الدالة فقط
برنامج
<?php



function test($rafia) {

$r = "300";

if (strlen($rafia)> $r)

{

echo" النص المكتوب اكثر من ثلاث مئة حرف ";

}

}

?>





المتغير الذي صرح داخل الدالة هو $r
نستدعي الدالة بهذا الشكل

برنامج
<?php

if (!test($guestbook))

{

exit;

}

?>




هذا الاستدعاء يوقف العملية اذا تحقق الشرط الموجود في الدالة test ()
عموما هذا ليس موضوعنا الان هذا موضوع الدرس القادم و أساليب متطورة اكثر لكن الغرض من المثال تعريف متغير داخل دالة

لقد انتهينا من جزء كبير في موضوع الدالة الخاصة وهنا بعض الدوال المساعدة وبعض التوجيهات المهمة
كما نتطرق إلى المصفوفات وكيف نتعامل معها في دالتك الخاصة

ٌقبل كل شيء تذكير بدروس الماضية
الدرس الاول

الدرس الثاني

الدرس الحالي
لم يبقى لدينا في انشاء الدالة الخاصة شي لم نشرحة
لكن هنا بعض الدوال المساعدة كي تصل لنتيجة سريعة
الدالة التي سوف نشرحها هي create_function
في هذة الدالة نقوم بتحديد البارمترات ثم نعيد العملية التي اجريت علية

مثال بسيط


كود
<?php
$my_function = create_function( '$a, $b','return $a+$b;' );
print $my_function( 5, 9 );
// outputs 14
?>




لاحظ ما قمنا به
كتبنا متغير وهو $my_function
ووضعنا له قيمة =
ثما قمنا بستخدام الدالة create_function
لاحظ داخل الدالة نبدأ في تحديد البارمترات ثم نعيد من الدالة عملية حسابية اجريناها على هذة البارمترات

ثم قمنا بطباعة الناتج
اثناء العملية الحسابية
لا يسمح لك بستخدام متغير في العملية الحسابية ما عدى البارمترات المضافة

الان المتغير $my_function يعتبر متعدد الاستخدام ياخذ عمل الدالة الخاصة
اي نستطيع استخدامة وتغيير البار متر في كل مرة


كود
<?php
$my_function = create_function( '$a, $b','return $a+$b;' );
print $my_function( 5, 9 ); // outputs 14
print "
";
print $my_function( 5, 6 ); // outputs 11
?>




انظر هذا المثال اكثر تعقيدا من موقع الغة الرسمي
يقوم بحسابات بستخدام دوال رياضية


كود
<?
$newfunc = create_function('$a,$b','return "ln($a) + ln($b) = ".log($a * $b);');
echo "New anonymous function: $newfunc\n";
echo $newfunc(2,M_E)."\n";

// outputs
// New anonymous function: lambda_1
// ln(2) + ln(2.718281828459) = 1.6931471805599
?>






الان ننتقل إلى الدالة function_exists
وظيفتها التحقق من وجود دالة اخرا ولنفرض اننا نريد ان نتحقق من داله اسمها rafiaphp بهذا الاسلوب



كود
<?
if (function_exists('rafiaphp'))
{
echo rafiaphp ();
}
else
{
echo "الدالة غير موجودة
\n";
}
?>




تحقق بنفسك من النتيجة

وعد وتحقق من هذه النتيجة ايضا


كود
<?
function rafiaphp ()
{
echo"السلام عليكم ورحمة الله
\n";
}

if (function_exists('rafiaphp'))
{
echo rafiaphp ();
}
else
{
echo "الدالة غير موجودة
\n";
}
?>





_____________


دالتي الخاصة والمصفوفات

طبعا المصفوفة غالبا تحمل اكثر من متغير
اذا كنت اريد تصريح جميع المتغيرات الموجودة في المصفوفة
هل نستخدم global ونكتب جميع المتغيرات ؟
الجواب يكفي تصريح اسم المصفوفة فقط
لنفرض ان هناك متغيرات في مصفوفة HTTP_POST_VARS


كود
$HTTP_POST_VARS['username'];
$HTTP_POST_VARS['usermail'];




في هذة الحالة نقوم بتصريح اسم المصفوفة فقط HTTP_POST_VARS
بعد ذلك نستطيع استخدام المتغيرات السابقة داخل دالتنا الخاصة
_______
ايضا اذا كنت ترغب في تمرير جميع عناصر المصفوفة على دالتك الخاصة هناك اكثر من حل
اسهلها بستخدام الدالة array_walk وتاخذ هذه الدالة بارمتران وثالث اختياري
الاول هي المصفوفة
الثاني هي الدالة
الاختياري اذا كان هناك بارمترات لدالة
هذا مثال مزدوج


كود
$arr1 = array ("رفيع","حسن","احمد","محمد");
$arr = array ("1"=>"رفيع", "2"=>"حسن", "3"=>"احمد", "4"=>"محمد");

function do_print ($item, $key) {
echo "$key. $item
\n";
}

function do_print1 ($item) {
echo "$item
\n";
}
echo "الطلاب
\n";
array_walk ($arr, 'do_print');
echo "الطلاب
\n";
array_walk ($arr1, 'do_print1');





وهنا مثال اذا كان هناك بارا متر في الدالة


كود
<?php
$arr = array ("1"=>"رفيع", "2"=>"حسن", "3"=>"احمد", "4"=>"محمد");
function do_print ($item, $key, $pre) {
print "$key: $pre:- $item
";
}
array_walk ($arr, 'do_print', 'الطالب');
?>

تحياتي لكم

Amoor
11-17-2004, 06:09 PM
تسلم حبيبي

Unix Com
11-21-2004, 11:49 PM
الله يسلمك

x9x6
11-22-2004, 04:18 PM
مشكووور حبيب قلبي

تحياتي

برامج العرب
02-28-2005, 01:49 AM
يعطيك العافية

المراقب العام
08-29-2008, 10:06 PM
الف شكرا لك اخي الكريم