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', 'الطالب');
?>
تحياتي لكم
دراسة حول الدالة الخاصة او كما يقال الدالة الشخصية
معنى الكلمة 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', 'الطالب');
?>
تحياتي لكم