LMPX.COM |
Home | Linux | Mysql | PHP | XML | ||
|
|
|||
From: Pedram Salehpoor Date: Fri Jun 20 13:05:38 2008 Subject: cvs: phpdoc-fa /language references.xml
psalehpoor Fri Jun 20 19:05:38 2008 UTC
Added files:
/phpdoc-fa/language references.xml
Log:
tranlated to persian
http://cvs.php.net/viewvc.cgi/phpdoc-fa/language/references.xml?view=markup&rev=1.1
Index: phpdoc-fa/language/references.xml
+++ phpdoc-fa/language/references.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 1.50 Maintainer: pedram Status: ready -->
<!-- $Revision: 1.1 $ -->
<chapter xml:id="language.references" xmlns="http://docbook.org/ns/docbook">
<title>مرجعهای توضیح داده شده</title>
<sect1 xml:id="language.references.whatare">
<title>مرجعها چهچیز هستند</title>
<simpara>
مرجعها در PHP وسیلهای برای دستیابی به محتوای یک متغیر با نامهای مختلف است. همانند اشارهگرها در C نیستند;
به جای آن نمادی برای جایگزینی جداول هستند. توجه کنید در PHP نام متغیر و محتوای متغیر دو مفهوم متفاوت هستند و
ممکن است یک محتوا دارای چندین نام باشد. نزدیکترین مفهوم در این باره مفهوم فایل و نام فایل در یونیکس است که
نام متغیرها همانند نام دایرکتوریها هستند و محتوای متغیرها همان خود فایل هستند. مرجعها همانند لینک سخت در یونیکس هستند.
</simpara>
</sect1>
<sect1 xml:id="language.references.whatdo">
<title>مرجعها چه میکنند</title>
<para>
مرجعهای PHP به شما اجازه میدهند تا دو متغیر به یک محتوا اشاره نمایند. به این معنا که زمانی که شما:
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
$a =& $b;
?>
]]>
</programlisting>
</informalexample>
به این معناست که <varname>$a</varname> و <varname>$b</varname>
اشاره به یک محتوا دارند.
<note>
<para>
<varname>$a</varname> و <varname>$b</varname> در اینجا کاملا برابر هستند
و <varname>$a</varname> به
<varname>$b</varname> یا برعکس اشاره نمینماید
<varname>$a</varname> و <varname>$b</varname> به یک محل اشاره مینمایند.
</para>
</note>
</para>
<note>
<para>
اگر آرایه به همراه مرجع کپی شود مقدار آن دچار تغییر مرجع نخواهند شد. این مورد برای آرایههای انتقالی از طریق مقدار به توابع نیز
درست است.
</para>
</note>
<note>
<para>
اگر شما یک مرجع به یک متغیر تعریف نشده بازگردانید یا انتقال دهید آ» متغیر ساخته خواهد شد.
<example>
<title>استفاده از مرجع متغیر ساخته نشده</title>
<programlisting role="php">
<![CDATA[
<?php
function foo(&$var) { }
foo($a); // $a is "created" and assigned to null
$b = array();
foo($b['b']);
var_dump(array_key_exists('b', $b)); // bool(true)
$c = new StdClass;
foo($c->d);
var_dump(property_exists($c, 'd')); // bool(true)
?>
]]>
</programlisting>
</example>
</para>
</note>
<para>
همان دستورات را میتوان برای توابع استفاده کرد که مرجع باز میگرداند و با عملگر
<literal>new</literal> (در PHP 4.0.4 و جدیدتر):
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
$bar =& new fooclass();
$foo =& find_var($bar);
?>
]]>
</programlisting>
</informalexample>
از زمان PHP 5 <link linkend="language.oop5.basic.new">new</link> مرجع را بصورت خودکار بازمیگرداند و استفاده از
<literal>=&</literal> در این متن نامطلوب شده و یک پیام سطح E_STRICT ایجاد مینماید.
</para>
<note>
<para>
استفاده نکردن از عملگر <literal>&</literal> operator یک کپی از شی ایجاد مینماید.
اگر شما از <literal>$this</literal> در کلاس استفاده نمایید بر روی نمونه فعلی عمل خواهد کرد.
انتصاب بدون <literal>&</literal> نمونه را کپی میکند (به عنوان مثال شی) و
<literal>$this</literal> بر روی کپی عمل خواهد کرد که همیشه مطلوب نیست.
معمولا شما یک نمونه برای کار کردن میخواهید تا میزان حافظه مصرفی و ملکرد مطلوب باشد.
</para>
<para>
در حالی که شما میتوانید از عملگر <literal>@</literal> برای
<emphasis>ساکت نمودن</emphasis> هر خزای سازنده هنگام استفاده از
<literal>@new</literal> بکار برید برای استفاده از عبارت
<literal>&new</literal> عمل نخواهد کرد. این محدودیت در Zend
Engine است و منجر به خطای تحلیلگر خواهد شد.
</para>
</note>
<warning>
<para>
اگر شما یک مرجع به یک متغیر اعلام شده <literal>global</literal>
در یک تابع نسبت دهید مرجع تنها در داخل تایع قابل اعلام است.
شما میتوانید از این موضوع با استفاده از آرایه <varname>$GLOBALS</varname> جلوگیری نمایید.
<example>
<title>ارجاع به متغیر جهانی در تابع</title>
<programlisting role="php">
<![CDATA[
<?php
$var1 = "Example variable";
$var2 = "";
function global_references($use_globals)
{
global $var1, $var2;
if (!$use_globals) {
$var2 =& $var1; // visible only inside the function
} else {
$GLOBALS["var2"] =& $var1; // visible also in global context
}
}
global_references(false);
echo "var2 is set to '$var2'\n"; // var2 is set to ''
global_references(true);
echo "var2 is set to '$var2'\n"; // var2 is set to 'Example variable'
?>
]]>
</programlisting>
</example>
به <literal>global $var;</literal> بصورت یک میانبر برای <literal>$var
=& $GLOBALS['var'];</literal> توجه نمایید. و نسبت دادن یک مرجع دیگر به <literal>$var</literal>
تنها مرجع متغیر محلی را تعویش مینماید.
</para>
</warning>
<note>
<para>
اگر شما یک مقدار به متغیر با استفاده از مرجعها در یک عبارت <link
linkend="control-structures.foreach">foreach</link> نسبت دهید مرجعها هم تغییر مییابند.
<example>
<title>مرجعها و عبارت foreach</title>
<programlisting role="php">
<![CDATA[
<?php
$ref = 0;
$row =& $ref;
foreach (array(1, 2, 3) as $row) {
// do something
}
echo $ref; // 3 - last element of the iterated array
?>
]]>
</programlisting>
</example>
</para>
</note>
<para>
دومین کاربرد مرجعها انتقال متغیر با ارجاع است. این کار با اشاره یک متغیر محلی در تابع و یک متغیر در حوزه فراخوانی ارجاع
به یک محتوا ممکن است. مثال:
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
function foo(&$var)
{
$var++;
}
$a=5;
foo($a);
?>
]]>
</programlisting>
</informalexample>
<varname>$a</varname> را برابر با 6 قرار خواهد داد. این مقدار در تابع <varname>foo</varname> بدلیل این که
<varname>$var</varname> به محتوایی یکسان با
<varname>$a</varname> اشاره میکند نست داده میشود. See also more detailed explanations about <link
linkend="language.references.pass">انتقال با ارجاع</link>.
</para>
<simpara>
کاربرد سوم مرجع این است که <link
linkend="language.references.return">بازگرداندن با مرجع</link>.
</simpara>
</sect1>
<sect1 xml:id="language.references.arent">
<title>مرجع چه چیزی نیست</title>
<para>
همانطور که پیش از این نیز گفته شد مرجع اشارهگر نیست. این به معنای عدم کارکرد مورد پیشبینی ساخت زیر است:
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
function foo(&$var)
{
$var =& $GLOBALS["baz"];
}
foo($bar);
?>
]]>
</programlisting>
</informalexample>
</para>
<simpara>
اتفاقی که میافتد این است که <varname>$var</varname> در
<varname>foo</varname> در
<varname>$bar</varname> فراخوانی کننده متصل شده اما دوباره به <varname>$GLOBALS["baz"]</varname> متصل میگردد.
راهی برای اتصال <varname>$bar</varname> در حوزه فراخوانی کننده به چیز دیگر با استفاده از مکانیسم ارجاع وجود ندارد با
توجه به این که <varname>$bar</varname> در تابع <varname>foo</varname> موجود نیست (با
<varname>$var</varname> نمایش داده شده است اما <varname>$var</varname> فقط محتوای متغیر داشته و جدول فراخوانی
فراخوانی اتصال نام به مقدار را در خود ندارد).
شما میتوانید از <link linkend="language.references.return">بازگرداندن مراجع</link>
برای ارجاع متغیرهای انتخاب شده در تابع استفاده نمایید.
</simpara>
</sect1>
<sect1 xml:id="language.references.pass">
<title>انتقال با مرجع</title>
<para>
شما میتوانید متغیر را با استفاده از مرجع به تابع انتقال دهید تا آن تابع آرگومانهای خود را تغییر دهند. دستورات
بصورت زیر است:
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
function foo(&$var)
{
$var++;
}
$a=5;
foo($a);
// $a is 6 here
?>
]]>
</programlisting>
</informalexample>
توجه نمایید نشانهٰاس از مرجع در فراخوانی تابع وجود ندارد و تنها در تعریف تابع دیده میشود. تعریف تابع به تنهایی
برای انتقال با مرجع کافی است. در نسخههای اخیر PHP شما یک هشدار با محتوای "زمان فراخوانی انتقال با مرجع"
نامطلوب است هنگام استفاده از & در <literal>foo(&$a);</literal> دریافت میکنید.
</para>
<para>
موارد زیر قادر به انتقال با استفاده از مرجع است:
<itemizedlist>
<listitem>
<simpara>
متغیر مانند <literal>foo($a)</literal>
</simpara>
</listitem>
<listitem>
<simpara>
عبارات جدید مانند <literal>foo(new foobar())</literal>
</simpara>
</listitem>
<listitem>
<para>
مرجع بازگردانده شده توسط تابع مانند:
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
function &bar()
{
$a = 5;
return $a;
}
foo(bar());
?>
]]>
</programlisting>
</informalexample>
توضیحات درباره <link
linkend="language.references.return">بازگرداندن مرجع</link> ببینید.
</para>
</listitem>
</itemizedlist>
</para>
<para>
عبارات دیگر باید به صورت مرجع منتقل نگردند و نتیجه غیرمشخص است. به عنوان مثال نمونه زیر انتقال با مرجع نادرست است:
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
function bar() // Note the missing &
{
$a = 5;
return $a;
}
foo(bar()); // Produces fatal error since PHP 5.0.5
foo($a = 5); // Expression, not variable
foo(5); // Produces fatal error
?>
]]>
</programlisting>
</informalexample>
این نیازمندیها برای PHP 4.0.4 و جدیدتر است.
</para>
</sect1>
<sect1 xml:id="language.references.return">
<title>بازگرداندن مرجع</title>
<para>
بازگرداندن با مرجع برای استفاده از یک تابع برای یافتن متغیر متصل به مرجع مفید است. بازگرداندن با مرجع را
برای افزایش عملکرد مورد استفاده قرار ندهید موتور به اندازه کافی باهوش است که آنها را بهینهسازی نماید. بازگرداندن
مرجع تنها با یک دلیل فنی موجه باید استفاده شود! برای بازگرداندن مرجع از این دستور استفاده کنید:
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
class foo {
public $value = 42;
public function &getValue() {
return $this->value;
}
}
$obj = new foo;
$myValue = &$obj->getValue(); // $myValue is a reference to $obj->value, which is 42.
$obj->value = 2;
echo $myValue; // prints the new value of $obj->value, i.e. 2.
?>
]]>
</programlisting>
</informalexample>
در این مثال ویژگی شی که توسط تابع
<varname>getValue</varname> بازگردانده شده تعیین گشته و کپی هیچ تغییری را دریافت ننموده است که همانند
استفاده نکردن از ساختار دستور مرجع است.
</para>
<note>
<simpara>
برخلاف ارسال پارامتر ر این جا شما باید از
<literal>&</literal> در هر دو محل - برای نشان دادن بازگشت با مرجع و نه کپی مانند معمول و برای نشان دادن
استفاده از اتصال مرجع و نه انتصاب معمولی باید برای <varname>$myValue</varname> انجام شود استفاده کنید.
</simpara>
</note>
<note>
<simpara>
اگر شما بخواهید یک مرجع را از تابع با دستور زیر بازگردانید:
<literal>return ($this->value);</literal> این دستور همانند تلاش شما برای بازگردادن نتیجه یک
<emphasis>عبارت</emphasis> <emphasis>عمل نخواهد کرد</emphasis> و نه متغیر با مرجع .
شما میتوانید متغیرهای مرجع را فقط از توابع بازگردانید و نه چیز دیگر. خطای
<constant>E_NOTICE</constant> از زمان PHP 4.4.0 و PHP
5.1.0 برای کدهای بازگرداننده عبارت دینامیک یا نتیجه عملگر
<literal>new</literal> ایجاد میگردد.
</simpara>
</note>
</sect1>
<sect1 xml:id="language.references.unset">
<title>غیرفعالسازی مرجعها</title>
<para>
وقتی شما مرجع را غیرفعال میسازید اتصال بین نام متغیر و محتوای آن را میشکنید. این به معنای از بین رفتن محتوای متغیر نیست
. برای مثال:
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
$a = 1;
$b =& $a;
unset($a);
?>
]]>
</programlisting>
</informalexample>
<varname>$b</varname> را غیرفعال نمیسازد تنها <varname>$a</varname>.
</para>
<simpara>
دوباره ممکن است مفید باشد تا این مورد را همانند یونیکس تصور نمایید که مشابه فراخوانی دستور
<command>unlink</command> است.
</simpara>
</sect1>
<sect1 xml:id="language.references.spot">
<title>تعیین محل مرجعها</title>
<simpara>
ساختار بسیاری از دستورات در PHP از طزیق مکانیسم مرجع ساخته شدهاند بنابراین اتصال برای این ساختها نیز برقرار است.
بعضی ساختارها مانند انتقالها و بازگرداندن با مرجع که بالا ذکر شد. ساختارهای دیگری نیز از مرجعها استفاده مینماید:
</simpara>
<sect2 xml:id="references.global">
<title>مرجعهای <literal>جهانی</literal></title>
<para>
وقتی شما یک متغیر را <command>global $var</command> اعلام مینمایید در حقیقت شما یک مرجع برای متغیر جهانی ایجاد مینمایید.
این کار به شکل زیر است:
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
$var =& $GLOBALS["var"];
?>
]]>
</programlisting>
</informalexample>
</para>
<simpara>
برای مثال غیرفعالسازی <varname>$var</varname> متغیر جهانی را غیرفعال نمیسازد.
</simpara>
</sect2>
<sect2 xml:id="references.this">
<title><literal>$this</literal></title>
<simpara>
در یک متذ شی <varname>$this</varname> یک مرجع به فراخواننده شی میباشد.
</simpara>
</sect2>
</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 |