LMPX.COM |
Home | Linux | Mysql | PHP | XML | ||
|
|
|||
From: Pedram Salehpoor Date: Tue Jun 24 11:28:00 2008 Subject: cvs: phpdoc-fa /language functions.xml
psalehpoor Tue Jun 24 17:28:00 2008 UTC
Added files:
/phpdoc-fa/language functions.xml
Log:
translation to persian
http://cvs.php.net/viewvc.cgi/phpdoc-fa/language/functions.xml?view=markup&rev=1.1
Index: phpdoc-fa/language/functions.xml
+++ phpdoc-fa/language/functions.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 1.69 Maintainer: pedram Status: ready -->
<!-- $Revision: 1.1 $ -->
<chapter xml:id="language.functions" xmlns="http://docbook.org/ns/docbook">
<title>توابع</title>
<sect1 xml:id="functions.user-defined">
<title>توابع تعریف شذه کاربر</title>
<para>
یک تابع با استفاده از دستور زیر قابل تعریف شدن است:
</para>
<para>
<example>
<title>شبه کد نمایش استفاده از توابع</title>
<programlisting role="php">
<![CDATA[
<?php
function foo($arg_1, $arg_2, /* ..., */ $arg_n)
{
echo "Example function.\n";
return $retval;
}
?>
]]>
</programlisting>
</example>
</para>
<simpara>
یک کد صحیح PHP میتواند در داخل تابع قرار گیرد حتی تعریف توابع
و <link linkend="keyword.class">کلاس</link>
.
</simpara>
<para>
نام تابع قوانین یکسانی مانند برچسبها پیروی مینماید. یک نام صحیح با یک حرف یا _ شروه شده و پس از آن حروف اعداد یا _
میتواند قرار گیرد. یک عبارت منظم برای این قوانین بصورت یر است:
<literal>[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*</literal>.
</para>
&tip.userlandnaming;
<simpara>
تابع نیاز به تعریف پیش از استفاده ندارند
<emphasis>به جز</emphasis> زمانی که یک تابع بصورت شرطی همانند مثالهای پایین تعریف شده باشد.
</simpara>
<para>
وقتی یک تابع بصورت شرطی تعریف میگردد همان طور که در دو مثال پایین نشان داده شده است.تعریف آن باید پیش از فراخوانی آن
نوشته شده باشد.
</para>
<para>
<example>
<title>توابع شرطی</title>
<programlisting role="php">
<![CDATA[
<?php
$makefoo = true;
/* We can't call foo() from here
since it doesn't exist yet,
but we can call bar() */
bar();
if ($makefoo) {
function foo()
{
echo "I don't exist until program execution reaches me.\n";
}
}
/* Now we can safely call foo()
since $makefoo evaluated to true */
if ($makefoo) foo();
function bar()
{
echo "I exist immediately upon program start.\n";
}
?>
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title>توابع در توابع</title>
<programlisting role="php">
<![CDATA[
<?php
function foo()
{
function bar()
{
echo "I don't exist until foo() is called.\n";
}
}
/* We can't call bar() yet
since it doesn't exist. */
foo();
/* Now we can call bar(),
foo()'s processesing has
made it accessible. */
bar();
?>
]]>
</programlisting>
</example>
</para>
<para>
تمام توابع و کلاسها در PHP حوزه جهانی دارند - آنها را میتوان خارج از تابع فراخواند حتی اگر در داخل تعریف شده باشد و
یا برعکس.
</para>
<simpara>
PHP از بارگذاری توابع پشتیبانی نمینماید و یک تابع از پیش تعریف شده را دوباره تعریف
کرد یا از تعریف خارج نمود.
</simpara>
<note>
<simpara>
نامهای تابع غیرحساس به حروف بزرگ یا کوچک است با این وجود
فراخوانی تابع به همان صورت تعریف آنها بسیار خوب است.
</simpara>
</note>
<simpara>
هر دو <link linkend="functions.variable-arg-list">تعداد آرگومان متغیر</link> و
<link linkend="functions.arguments.default">آرگومان پیشفرض</link> در تابعها فراخوانی
میگردد. همچنین مرجعهای تابع برای
<function>func_num_args</function>
<function>func_get_arg</function> و
<function>func_get_args</function> برای اطلاعات بیشتر ببینید.
</simpara>
<para>
میتوان توابع بازگشتی را در PHP فراخواند. به هر حال توابع متدهای بازگشتی با بشاز ۱۰۰-۲۰۰ بار فراخوانی میتواند موجب اتمام
پشته در اسکریپت فعلی گردد.
<example>
<title>توابع بازگشتی</title>
<programlisting role="php">
<![CDATA[
<?php
function recursion($a)
{
if ($a < 20) {
echo "$a\n";
recursion($a + 1);
}
}
?>
]]>
</programlisting>
</example>
</para>
</sect1>
<sect1 xml:id="functions.arguments">
<title>آرگومانهای تابع</title>
<simpara>
اطلاعات به تابع از طریق آرگومانها ارسال خواهد شد که توسط لیستی جدا شده
کاما نشان داده میشود.
</simpara>
<para>
PHP از آرگومانهای مقدار (پیشفرض) <link
linkend="functions.arguments.by-reference">ارسال با مرجع</link> و <link
linkend="functions.arguments.default">مقدارهای آرگومان پیشفرض</link> پشتیبانی مینماید.
<link linkend="functions.variable-arg-list">فهرست متغیر آرگومانها</link> نیز پشتیبانی شدهاند
مرجع توابع برای
<function>func_num_args</function>
<function>func_get_arg</function> و
<function>func_get_args</function> برای اطلاعات بیشتر ببینید.
</para>
<para>
<example>
<title>Passing arrays to functions</title>
<programlisting role="php">
<![CDATA[
<?php
function takes_array($input)
{
echo "$input[0] + $input[1] = ", $input[0]+$input[1];
}
?>
]]>
</programlisting>
</example>
</para>
<sect2 xml:id="functions.arguments.by-reference">
<title>آرگومانهای ارسال شده توسط مرجع</title>
<simpara>
بطور پیشفرض آرگومانهای تابع بصورت مقدار (بدین ترتیب تغییر مقدار آرگومان در تابع
تاثیری بر متغیر در برنامه ندارد). برای این که یک تابع آرگومانهای خود را تغییر دهد
باید آنها را بصورت مرجع به آن ارسال نماییم.
</simpara>
<para>
برای ارسال یک آرگومان بصورت مرجع به تابع
یک علامت (&) به نام آرگومان در تعریف تابع اضافه نمایید:
</para>
<para>
<example>
<title>ارسال پارامترهای تابع با استفاده از مرجع</title>
<programlisting role="php">
<![CDATA[
<?php
function add_some_extra(&$string)
{
$string .= 'and something extra.';
}
$str = 'This is a string, ';
add_some_extra($str);
echo $str; // outputs 'This is a string, and something extra.'
?>
]]>
</programlisting>
</example>
</para>
</sect2>
<sect2 xml:id="functions.arguments.default">
<title>مقدار پیشفرض آرگومان</title>
<para>
یک تابع ممکن است مقادیر پیشفرض همانند C++ برای آرگومانهای خطی خود تعریف مینماید همانطور که در پایین نشان داده شده است:
</para>
<para>
<example>
<title>استفاده از پارامتر پیشفرض</title>
<programlisting role="php">
<![CDATA[
<?php
function makecoffee($type = "cappuccino")
{
return "Making a cup of $type.\n";
}
echo makecoffee();
echo makecoffee(null);
echo makecoffee("espresso");
?>
]]>
</programlisting>
</example>
</para>
<para>
خروجی مثال بالا بصورت زیر خواهد بود:
</para>
<para>
<screen>
Making a cup of cappuccino.
Making a cup of .
Making a cup of espresso.
</screen>
</para>
<para>
PHP همچنین استفاده از <type>array</type> و نوع ویژه &null; را به عنوان مقدار پیشفرض خود فراهم نموده است به عنوان نمونه:
</para>
<para>
<example>
<title>استفاده از انواع غیرخطی به عنوان مقدار پیشفرض پارامتر</title>
<programlisting role="php">
<![CDATA[
<?php
function makecoffee($types = array("cappuccino"), $coffeeMaker = NULL)
{
$device = is_null($coffeeMaker) ? "hands" : $coffeeMaker;
return "Making a cup of ".join(", ", $types)." with $device.\n";
}
echo makecoffee();
echo makecoffee(array("cappuccino", "lavazza"), "teapot");
?>
]]>
</programlisting>
</example>
</para>
<simpara>
مقدار پیشفرض باید یک عبارت ثابت باشد و نه یک متغیر یک عضو کلاس یا فراخوانی تابع (برای نمونه).
</simpara>
<para>
توجه نمایید که هنگام استفاده از آرگومان پیشفرض هر پیشفرض
در سمت راست هر آرگومان غیرپیشفرض باشد. کد پایین را در نظر بگیرید:
</para>
<para>
<example>
<title>استفاده نادرست از آرگومان پیشفرض تابع</title>
<programlisting role="php">
<![CDATA[
<?php
function makeyogurt($type = "acidophilus", $flavour)
{
return "Making a bowl of $type $flavour.\n";
}
echo makeyogurt("raspberry"); // won't work as expected
?>
]]>
</programlisting>
</example>
</para>
<para>
خروجی مثال بالا:
</para>
<para>
<screen>
Warning: Missing argument 2 in call to makeyogurt() in
/usr/local/etc/httpd/htdocs/phptest/functest.html on line 41
Making a bowl of raspberry .
</screen>
</para>
<para>
حال مثال بالا را با مثال زیر مقایسه کنید:
</para>
<para>
<example>
<title>استفاده درست از آرگومانهای پیشفرض</title>
<programlisting role="php">
<![CDATA[
<?php
function makeyogurt($flavour, $type = "acidophilus")
{
return "Making a bowl of $type $flavour.\n";
}
echo makeyogurt("raspberry"); // works as expected
?>
]]>
</programlisting>
</example>
</para>
<para>
خروجی این مثال:
</para>
<para>
<screen>
Making a bowl of acidophilus raspberry.
</screen>
</para>
<note>
<simpara>
همچنان در PHP 5 مقدار پیشفرض از طریق مرجع ارسال میگردد:
</simpara>
</note>
</sect2>
<sect2 xml:id="functions.variable-arg-list">
<title>فهرست آرگومانها با طول متغیر</title>
<simpara>
PHP 4 و بالاتر از فهرستهای آرگومان با طول متغیر پشتیبانی مینماید. این کار بسیار است و از توابع
<function>func_num_args</function>
<function>func_get_arg</function> و
<function>func_get_args</function> استفاده میکند.
</simpara>
<simpara>
دستور ویژهای مورد نیاز نیست و فهرست آرگومان توسط تعریف تابع دقیقا فراهم میگردد و بصورت معمول رفتار مینماید.
</simpara>
</sect2>
</sect1>
<sect1 xml:id="functions.returning-values">
<title>بازگرداندن مقادیر</title>
<para>
مقادیر با استفاده از جمله اختیاری return بازگردانده میشود. هر نوعی قابل بازگردانده شدن است که شامل آرایهها و اشیا نیز است.
این باعث میشود تابع اجرای خود را بلافاصله به پایان برده و کنترل را به خطی که از آن فراخوانده شده است بازگرداند.
<function>return</function> را برای اطلاعات بیشتر ببینید.
</para>
<para>
<example>
<title>استفاده از <function>return</function></title>
<programlisting role="php">
<![CDATA[
<?php
function square($num)
{
return $num * $num;
}
echo square(4); // outputs '16'.
?>
]]>
</programlisting>
</example>
</para>
<para>
یک تابع نمیذتواند چندین مقدار بازگرداند اما نتایج مشابه را میتوان از طریق آرایه بازپس فرستاد.
</para>
<para>
<example>
<title>بازگرداندن آرایه با چندین مقدار</title>
<programlisting role="php">
<![CDATA[
<?php
function small_numbers()
{
return array (0, 1, 2);
}
list ($zero, $one, $two) = small_numbers();
?>
]]>
</programlisting>
</example>
</para>
<para>
برای بازگرداندن مرجع از یک تابع از عملگر مرجع & در تعریف تابع و زمان انتصاب مقدار بازگردانده شده به متغیر استفاده کنید:
</para>
<para>
<example>
<title>بازگرداندن مرجع از یک تابع</title>
<programlisting role="php">
<![CDATA[
<?php
function &returns_reference()
{
return $someref;
}
$newref =& returns_reference();
?>
]]>
</programlisting>
</example>
</para>
<simpara>
برای اطلاعات بیشتر درباره مرجع <link
linkend="language.references">مرجع توضیح داده شده</link> را ببینید.
</simpara>
</sect1>
<sect1 xml:id="functions.variable-functions">
<title>توابع متغیر</title>
<para>
PHP از مفهوم توابع متغیر پشتیبانی میذنماید. اگر یک نام متغیر بدون پرانتز به آن نوشته شود
PHP بدنبال یک تابع با همان نام گشته وآن را بدون توجه به مقدار متغیر اجرا خواهد کرد. در میان چیرهای دیگر این
قابلیت برای پیادهسازی callback جدول توابع و غیره مناسب است.
</para>
<para>
توابع متغیر در ساختارهای زبانی مانند
<function>echo</function> <function>print</function>
<function>unset</function> <function>isset</function>
<function>empty</function> <function>include</function>
<function>require</function> و همانند آنها عمل نخواهد کرد. توابع پوشاننده را برای استفاده
از این ساختارها به عنوان یک تابع متغیر استفاده نمایید.
</para>
<para>
<example>
<title>نمونه تابع متغیر</title>
<programlisting role="php">
<![CDATA[
<?php
function foo() {
echo "In foo()<br />\n";
}
function bar($arg = '')
{
echo "In bar(); argument was '$arg'.<br />\n";
}
// This is a wrapper function around echo
function echoit($string)
{
echo $string;
}
$func = 'foo';
$func(); // This calls foo()
$func = 'bar';
$func('test'); // This calls bar()
$func = 'echoit';
$func('test'); // This calls echoit()
?>
]]>
</programlisting>
</example>
</para>
<para>
یک متد شی میتواند از دستورات یک تابع متغیر
نیز فراخوانی گردد.
<example>
<title>نمونه متد متغیر</title>
<programlisting role="php">
<![CDATA[
<?php
class Foo
{
function Variable()
{
$name = 'Bar';
$this->$name(); // This calls the Bar() method
}
function Bar()
{
echo "This is Bar";
}
}
$foo = new Foo();
$funcname = "Variable";
$foo->$funcname(); // This calls $foo->Variable()
?>
]]>
</programlisting>
</example>
</para>
<para>
همچنین <function>call_user_func</function>
<link linkend="language.variables.variable">
متغیر متغیرها</link> و <function>function_exists</function> را ببینید.
</para>
</sect1>
<sect1 xml:id="functions.internal">
<title>توابع داخلی</title>
<para>
PHP به همراه تعداد زیادی توابع استاندارد و ساختهای مناسب است.
توابعی نیز وجود دارند که نیازمند ضمیمههای کامپایل شده در PHP هستند در غیر این صورت
خطای مرگبار "undefined function" ظاهر خواهد شد. برای نمونه برای استفاده از توابع
<link linkend="ref.image">image</link> مانند
<function>imagecreatetruecolor</function> PHP باید به همراه
<productname>GD</productname> کامپایل گردد. یا برای استفاده
<function>mysql_connect</function> PHP باید به همراه
<link linkend="ref.mysql">MySQL</link> کامپایل گردد. تعداد زیادی توابع هسته وجود دارند که در هز نسخه PHP هستند مانند
<link linkend="ref.strings">string</link> و توابع
<link linkend="ref.var">variable</link> . یک فراخوانی <function>phpinfo</function> یا
<function>get_loaded_extensions</function> تمام ضمیمههای بارگذاری شده در PHP را نشان خواهد داد
. همچنین توجه نمایید بسیاری از ضمیمهها بصورت خودکار فعال هستند.
و راهنمای PHP برای ضمیمهها تقسیم شده است.
<link linkend="configuration">تنظیمات</link>
<link linkend="install">نصب</link> و فصل جداگانه تنظیمات را ببینید تا اطلاعات بیشتری درباره نحوه تنظیم PHP داشته باشید.
</para>
<para>
خواندن و فهمیدن نمونه آزمایشی تابع در بخش راهنما با عنوان
<link linkend="about.prototypes">چگونه تعریف تابع را بخوانیم</link> توضیح داده شده است.
مهم است که بدانیم یک تابع چه مقداری را باز میگرداند یا چگونه آرگومانهای خود را ارسال مینماید.
برای نمونه
<function>str_replace</function> رشته تغییر یافته باز میگرداند.
<function>usort</function> بر روی متغیر واقعی عمل مینماید. هر صفحه راهنما برای هر تابع اطلاعات مربوط به خود
را همانند پارامترها تغییر رفتارها مقادیر بازگشتی برای موفقیت یا شکست را ذکر مینماید. اطلاع داشتن از این موارد
(عموما اندک) برای کارکرد درست کد در PHP حیاتی است.
</para>
<note>
<simpara>
اگر پارامترهای ارسال شده طبق انتظار آن نباشد مانند ارسال <type>array</type> در جای
<type>string</type> مقدار بازگشتی تابع مشخص نیست. در این حالت احتمالا مقدار بازگشتی &null; است
اما این فقط مفهومی است و نمیتوان بر ان تکیه کرد.
upon.
</simpara>
</note>
<para>
همچنین <function>function_exists</function>
<link linkend="funcref">مرجع توابع</link>
<function>get_extension_funcs</function> و
<function>dl</function> را ببینید.
</para>
</sect1>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->
| Navigate in group php.doc.fa at sever news.php.net | |
| Previous | Next |
| No Copyright You are free to use Anything |
Site Maintained by PHP Developer
Powered By PHP Consultants |