هل هناك حاجة لتمرير المتغير حسب المرجع في PHP5؟

StackOverflow https://stackoverflow.com/questions/885586

  •  23-08-2019
  •  | 
  •  

سؤال

باستخدام PHP5 باستخدام "نسخ على الكتابة" والمرور حسب المرجع مما يؤدي إلى المزيد من عقوبة الأداء أكثر من مكسب، لماذا يجب أن أستخدم مرجع المرور؟ بخلاف وظائف المكالمات التي من شأنها أن تعيد أكثر من قيمة أو فئات من السمات التي تريد أن تكون قابلة للتغيير دون استدعاء وظيفة مجموعة لاحقا (ممارسة سيئة، وأنا أعلم)، هل هناك استخدام لذلك أنا في عداد المفقودين؟

هل كانت مفيدة؟

المحلول

تستخدم مرجع المرور عند الرغبة في تعديل النتيجة وهذا كل شيء هناك.

تذكر كذلك ذلك في كائنات PHP دائما مرجع المرور.

أنا شخصيا أجد نظام PHP لنسخ القيم ضمنيا (أعتقد أن الدفاع عن التعديل العرضي) مرهق وغير مهني ولكن مرة أخرى بدأت في لغات مكتوبة بشدة، والتي ربما تشرح ذلك. لكنني أجد أنه من المثير للاهتمام أن الكائنات تختلف عن عملية PHP العادية وأخذها كدليل على أن آلية النسخ الضمنية الضمنية PHP ليست حقا نظام جيد.

نصائح أخرى

وظيفة العودية التي تملأ صفيف؟ تذكر كتابة شيء من هذا القبيل، مرة واحدة.

لا توجد نقطة في وجود مئات من نسخ من صفيف ممتلئة جزئيا والنسخ والربط والانضمام إلى أجزاء في كل منعطف.

حتى عند تمرير الكائنات هناك فرق.

جرب هذا المثال:

class Penguin { }

$a = new Penguin();

function one($a)
{
  $a = null;
}

function two(&$a)
{
  $a = null;
}

var_dump($a);
one($a);
var_dump($a);
two($a);
var_dump($a);

ستكون النتيجة:

object(Penguin)#1 (0) {}
object(Penguin)#1 (0) {}
NULL

عند تمرير متغير يحتوي على مرجع إلى كائن حسب المرجع، يمكنك تعديل المرجع إلى الكائن.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top