https://wiki.hsoub.com/index.php?title=PHP/properties_visibility&feed=atom&action=history
PHP/properties visibility - تاريخ المراجعة
2024-03-29T01:34:27Z
تاريخ التعديل لهذه الصفحة في الويكي
MediaWiki 1.35.0
https://wiki.hsoub.com/index.php?title=PHP/properties_visibility&diff=5596&oldid=prev
عبد اللطيف ايمش: نقل عبد اللطيف ايمش صفحة PHP/OOP/visibility إلى PHP/properties visibility: إعادة هيكلة التوثيق
2018-04-04T03:50:30Z
<p>نقل عبد اللطيف ايمش صفحة <a href="/PHP/OOP/visibility" class="mw-redirect" title="PHP/OOP/visibility">PHP/OOP/visibility</a> إلى <a href="/PHP/properties_visibility" title="PHP/properties visibility">PHP/properties visibility</a>: إعادة هيكلة التوثيق</p>
<table class="diff diff-contentalign-right diff-editfont-monospace" data-mw="interface">
<tr class="diff-title" lang="ar">
<td colspan="1" style="background-color: #fff; color: #202122; text-align: center;">→ مراجعة أقدم</td>
<td colspan="1" style="background-color: #fff; color: #202122; text-align: center;">مراجعة 03:50، 4 أبريل 2018</td>
</tr><tr><td colspan="2" class="diff-notice" lang="ar"><div class="mw-diff-empty">(لا فرق)</div>
</td></tr></table>
عبد اللطيف ايمش
https://wiki.hsoub.com/index.php?title=PHP/properties_visibility&diff=2269&oldid=prev
عبد اللطيف ايمش: استبدال النص - '\[\[تصنيف:(.*)\]\]' ب'{{SUBPAGENAME}}'
2018-01-28T15:42:42Z
<p>استبدال النص - '\[\[تصنيف:(.*)\]\]' ب'<a href="/index.php?title=%D8%AA%D8%B5%D9%86%D9%8A%D9%81:$1&action=edit&redlink=1" class="new" title="تصنيف:$1 (الصفحة غير موجودة)">{{SUBPAGENAME}}</a>'</p>
<table class="diff diff-contentalign-right diff-editfont-monospace" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="ar">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">→ مراجعة أقدم</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">مراجعة 15:42، 28 يناير 2018</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l252" >سطر 252:</td>
<td colspan="2" class="diff-lineno">سطر 252:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== مصادر ==</div></td><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== مصادر ==</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* [http://php.net/manual/en/language.oop5.visibility.php صفحة OOP Visibility في توثيق PHP الرسمي.]</div></td><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* [http://php.net/manual/en/language.oop5.visibility.php صفحة OOP Visibility في توثيق PHP الرسمي.]</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>[[تصنيف:PHP]]</div></td><td class='diff-marker'>+</td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>[[تصنيف:PHP<ins class="diffchange diffchange-inline">|{{SUBPAGENAME}}</ins>]]</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>[[تصنيف:PHP OOP]]</div></td><td class='diff-marker'>+</td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>[[تصنيف:PHP OOP<ins class="diffchange diffchange-inline">|{{SUBPAGENAME}}</ins>]]</div></td></tr>
</table>
عبد اللطيف ايمش
https://wiki.hsoub.com/index.php?title=PHP/properties_visibility&diff=1038&oldid=prev
Mohammed Taher في 05:41، 17 يناير 2018
2018-01-17T05:41:03Z
<p></p>
<p><b>صفحة جديدة</b></p><div><noinclude>{{DISPLAYTITLE:قابلية الرؤية في كائنات PHP}}</noinclude><br />
يمكن تعريف قابلية رؤية خاصية أو تابع أو (بدءًا من الإصدار 7.1.0 من اللغة) ثابت بأنّها إلحاق صيغة التصريح بإحدى الكلمات المفتاحية public، أو protected، أو private. يتيح التصريح من نوع public الوصول إلى أعضاء الصنف من أي مكان، ويتيح التصريح من نوع protected الوصول إلى الأعضاء من داخل الصنف نفسه أو الأصناف التي ترث الصنف أو تورّثه، أما التصريح من نوع private فيتيح الوصول إلى الأعضاء من داخل الصنف الذي عرِّف فيه ذلك العضو حصرًا.<br />
<br />
== قابلية رؤية الخاصية ==<br />
يجب أن يكون التصريح عن خاصيات الأصناف من نوع public، أو private، أو protected، وإن استخدمت الكلمة المفتاحية var للتصريح عن الخاصية فإنّها تعدّ من النوع public.<br />
<br />
المثال 1: التصريح عن الخاصيات<br />
<syntaxhighlight lang="php"><br />
<br />
<?php<br />
/**<br />
* Define MyClass<br />
*/<br />
class MyClass<br />
{<br />
public $public = 'Public';<br />
protected $protected = 'Protected';<br />
private $private = 'Private';<br />
<br />
function printHello()<br />
{<br />
echo $this->public;<br />
echo $this->protected;<br />
echo $this->private;<br />
}<br />
}<br />
<br />
$obj = new MyClass();<br />
echo $obj->public;// Works<br />
echo $obj->protected; // Fatal Error<br />
echo $obj->private; // Fatal Error<br />
$obj->printHello(); // Shows Public, Protected and Private<br />
<br />
<br />
/**<br />
* Define MyClass2<br />
*/<br />
class MyClass2 extends MyClass<br />
{<br />
// We can redeclare the public and protected properties, but not private<br />
public $public = 'Public2';<br />
protected $protected = 'Protected2';<br />
<br />
function printHello()<br />
{<br />
echo $this->public;<br />
echo $this->protected;<br />
echo $this->private;<br />
}<br />
}<br />
<br />
$obj2 = new MyClass2();<br />
echo $obj2->public; // Works<br />
echo $obj2->protected; // Fatal Error<br />
echo $obj2->private; // Undefined<br />
$obj2->printHello(); // Shows Public2, Protected2, Undefined<br />
<br />
?><br />
</syntaxhighlight><br />
<br />
ملاحظة: لضمان عدم حصول مشاكل في توافق الشيفرة مع الإصدار الرابع من اللغة، فإنّ الإصدار الخامس لا زال يدعم الكلمة المفتاحية var (كمرادف للكلمة المفتاحية public). يؤدي استخدام الكلمة المفتاحية var في الإصدارت السابقة للإصدار 5.1.3 إلى إطلاق تحذير من نوع E_STRICT.<br />
<br />
== قابلية رؤية التابع ==<br />
يمكن التصريح عن توابع الأصناف كتوابع من نوع public، أو protected، أو private. وفي حال عدم استخدام أي كلمة مفتاحية لتحديد طبيعة التصريح، فإن اللغة ستعدّ أن التابع من النوع public.<br />
<br />
المثال 2: التصريح عن التوابع<br />
<syntaxhighlight lang="php"><br />
<br />
<?php<br />
/**<br />
* Define MyClass<br />
*/<br />
class MyClass<br />
{<br />
// التصريح عن دالة بانية عامة<br />
public function __construct() { }<br />
<br />
// التصريح عن دالة عامة<br />
public function MyPublic() { }<br />
<br />
// التصريح عن دالة محمية<br />
protected function MyProtected() { }<br />
<br />
// التصريح عن دالة خاصة<br />
private function MyPrivate() { }<br />
<br />
// هذه الدالة عامة<br />
function Foo()<br />
{<br />
$this->MyPublic();<br />
$this->MyProtected();<br />
$this->MyPrivate();<br />
}<br />
}<br />
<br />
$myclass = new MyClass;<br />
$myclass->MyPublic(); // Works<br />
$myclass->MyProtected(); // Fatal Error<br />
$myclass->MyPrivate(); // Fatal Error<br />
$myclass->Foo(); // Public, Protected and Private work<br />
<br />
<br />
/**<br />
* Define MyClass2<br />
*/<br />
class MyClass2 extends MyClass<br />
{<br />
// This is public<br />
function Foo2()<br />
{<br />
$this->MyPublic();<br />
$this->MyProtected();<br />
$this->MyPrivate(); // Fatal Error<br />
}<br />
}<br />
<br />
$myclass2 = new MyClass2;<br />
$myclass2->MyPublic(); // Works<br />
$myclass2->Foo2(); // Public and Protected work, not Private<br />
<br />
class Bar <br />
{<br />
public function test() {<br />
$this->testPrivate();<br />
$this->testPublic();<br />
}<br />
<br />
public function testPublic() {<br />
echo "Bar::testPublic\n";<br />
}<br />
<br />
private function testPrivate() {<br />
echo "Bar::testPrivate\n";<br />
}<br />
}<br />
<br />
class Foo extends Bar <br />
{<br />
public function testPublic() {<br />
echo "Foo::testPublic\n";<br />
}<br />
<br />
private function testPrivate() {<br />
echo "Foo::testPrivate\n";<br />
}<br />
}<br />
<br />
$myFoo = new Foo();<br />
$myFoo->test(); // Bar::testPrivate <br />
// Foo::testPublic<br />
?><br />
</syntaxhighlight><br />
<br />
== قابلية رؤية الثوابت ==<br />
منذ الإصدار 7.1.0 من اللغة أصبح بالإمكان تعريف الثوابت كثوابت من النوع public، أو private، أو protected. وفي حال عدم استخدام أي كلمة مفتاحية عند التصريح عن الثابت فإنّ اللغة ستعدّه من نوع public.<br />
<br />
المثال 3: التصريح عن الثوابت في الإصدار 7.1.0 وما بعده<br />
<syntaxhighlight lang="php"><br />
<br />
<?php<br />
/**<br />
* Define MyClass<br />
*/<br />
class MyClass<br />
{<br />
// التصريح عن ثابت عام<br />
public const MY_PUBLIC = 'public';<br />
<br />
// التصريح عن ثابت محمي<br />
protected const MY_PROTECTED = 'protected';<br />
<br />
// التصريح عن ثابت خاص<br />
private const MY_PRIVATE = 'private';<br />
<br />
public function foo()<br />
{<br />
echo self::MY_PUBLIC;<br />
echo self::MY_PROTECTED;<br />
echo self::MY_PRIVATE;<br />
}<br />
}<br />
<br />
$myclass = new MyClass();<br />
MyClass::MY_PUBLIC; // Works<br />
MyClass::MY_PROTECTED; // Fatal Error<br />
MyClass::MY_PRIVATE; // Fatal Error<br />
$myclass->foo(); // Public, Protected and Private work<br />
<br />
<br />
/**<br />
* Define MyClass2<br />
*/<br />
class MyClass2 extends MyClass<br />
{<br />
// This is public<br />
function foo2()<br />
{<br />
echo self::MY_PUBLIC;<br />
echo self::MY_PROTECTED;<br />
echo self::MY_PRIVATE; // Fatal Error<br />
}<br />
}<br />
<br />
$myclass2 = new MyClass2;<br />
echo MyClass2::MY_PUBLIC; // Works<br />
$myclass2->foo2(); // Public and Protected work, not Private<br />
?><br />
</syntaxhighlight><br />
<br />
== قابلية الرؤية في الكائنات الأخرى ==<br />
يمكن للكائنات التي تكون من النوع ذاته الوصول إلى الأعضاء من النوع private و protected حتى لو لم تكن هذه الكائنات نسخًا متشابهة، وسبب ذلك هو تفاصيل الاستخدام المحدّد تكون معروفة داخل تلك الكائنات.<br />
<br />
المثال 4: الوصول إلى أعضاء من نوع private في كائن من نفس النوع<br />
<syntaxhighlight lang="php"><br />
<br />
<?php<br />
class Test<br />
{<br />
private $foo;<br />
<br />
public function __construct($foo)<br />
{<br />
$this->foo = $foo;<br />
}<br />
<br />
private function bar()<br />
{<br />
echo 'Accessed the private method.';<br />
}<br />
<br />
public function baz(Test $other)<br />
{<br />
$other->foo = 'hello';<br />
var_dump($other->foo);<br />
<br />
$other->bar();<br />
}<br />
}<br />
<br />
$test = new Test('test');<br />
<br />
$test->baz(new Test('other'));<br />
?><br />
</syntaxhighlight><br />
<br />
تعطي الشيفرة السابقة النتيجة التالية:<br />
<syntaxhighlight lang="php"><br />
<br />
string(5) "hello"<br />
Accessed the private method.<br />
</syntaxhighlight><br />
== مصادر ==<br />
* [http://php.net/manual/en/language.oop5.visibility.php صفحة OOP Visibility في توثيق PHP الرسمي.]<br />
[[تصنيف:PHP]]<br />
[[تصنيف:PHP OOP]]</div>
Mohammed Taher