تستخدم هذه الطريقة لجعل محتويات الكائن متاحة للاستخدام من خارج هذا الكائن.
و تستخدم للتغلب على أن التوريث مقيد بـ كلاس واحدة فقط.
الطريقة:
1- من المعروف أنه يمكننا ربط المتغيرات ببعضها باستخدام =&
كود PHP:
$a = 'aaa';
echo $b."\n";
$b =& $a;
$b = 'bbb';
echo $a;
وهذا ما تم عمله في كائن CI_Base حيث تم ربط جميه محتوياته بمتغير ستاتيك
كود PHP:
self::$instance =& $this;
2- يمكن ربط القيمة التي ترجعها الدالة return بمتغير ما بوضع & قبل اسمها عند التعريف وعند الطلب
كود PHP:
$value = 'aaa';
function &change_value(){
global $value;
return $value;
}
$var = &change_value();
echo $var."\n";
$var = 'bbb';
echo $vallue;
وهذا ما تم عمله في get_instance الموجودة داخل الكائن الرئيسي حيث تقوم بارجاع فيمة المتغير instance الذي يحتوي على نسخة من الكائن بأكمله، وجعلها ستاتيك حتى يمكن الوصول لها من خارج الكائن.
3- ثم تم عمل نفس الخطوة 2 مع الدالة الخارجية get_instance حيث تقوم بارجاع نسخة من الكائن مع ربطها أيضا.
4- للوصول لمحتويات الكائن (قراءة و تعديل) من الخارج نقوم بطلب دالة get_instance الخارجية.
كود PHP:
$obj =& get_instance();
* هذه العملية ليست مرتبطة ب CodeIgniter لأنها تستخدم في أطر عمل كثيرة للتغلب على قيد التوريث باستخدام كلاس واحدة ولجعل المحتوى متاح للاستخدام من خارج الكائن الرئيسي.
* في الخطوة 2 لماذا لم يتم طلب المتغير instance مباشرة من الدالة الخارجية get_instance؟
لأننا في هذه الحالة سنتمكن من القراءة دون التعديل. يجب أن يتم التعديل باستخدام دالة من داخل الكائن. local يعني.
* في المثال في الخطوة 2 ايضا تم استخدام متغير value و جلب فيمته باستخدام global وذلك لتوضيح الفكرة، لكن يمكنك ارجاع متغير بالطريقة التي تحتاجها.