لماذا var_dump كائنات عقيدة تقتل بلدي أباتشي؟

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

  •  03-07-2019
  •  | 
  •  

سؤال

ولدي مشكلة غريبة جدا، وعندما أحاول أن var_dump (أو print_r) كائن عقيدة، والاستجابات أباتشي بلدي مع صفحة فارغة فارغة (200 موافق رأس). أستطيع أن var_dump بي إتش بي فار عادي مثل:

$dummy = array("a" => 1, "b" =>2);

وأنه يعمل بشكل جيد. ولكن لا أستطيع مع أي كائن من أي فئة عقيدة، (مثل نتيجة لذلك من $connection->query()، أو مثيل لفئة من طراز كائن بلدي مع عقيدة).

وأي شخص يعرف لماذا يحدث هذا؟

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

المحلول

ولقد كان في بعض الأحيان عند محاولة print_r() كائن المرجعية الذاتية - يحصل في حلقة ونفدت الذاكرة. ربما هذا ما يحدث لك.

وحاول زيادة الحد الذاكرة (ini_set('memory_limit', '256M');) ومعرفة ما إذا كان يصلح له.

وتحرير: أنا لا أعتقد أن هناك أي الإصلاح الفعلي لهذا - انها PHP في داخلي var_dump / print_r التي لا تحد من عمق في العودية (أو لا تفعل ذلك بشكل صحيح، على الأقل). إذا قمت بتثبيت XDebug الإرشاد، وهذا يمكن أن تحل محل المدمج في var_dump مع الإصدار الذي يعالج العودية أفضل بكثير.

نصائح أخرى

وكلاء تحميل كسول تحتوي دائما مثيل EntityManager عقيدة وجميع الأقاليم التابعة لها.

ولذا فإن var_dump ربما تفريغ بنية العودية كبير جدا وهو أمر مستحيل لتقديم وقراءة. لديك لاستخدام \Doctrine\Common\Util\Debug::dump() للحد من إلقاء إلى مستوى مقروء الإنسان. لاحظ أنه يتم تعيين عمق الافتراضي لهذه الوظيفة ل2 (وهو المعلمة الثانية)

استخدم طريقة toArray الطبقة Doctrine_Record

var_dump($doctrine_record->toArray());

وسيتم عرض فقط الحقول DB وتجنب الإغراق في الداخلية عقيدة كاملة (الذي يحتوي على إشارة الذات / العودية راجع للشغل)

ويمكنك استخدام toArray إذا كنت متأكدا من الكائن مثيل Doctrine_Collection. Xdebug لا يساعد مع سجلات المذهب.

والطريقة أقترح على تنفيذ وظيفة متكررة مخصصة لطباعة الكائن، التي تستخدم Doctrine_Record :: toArray () عند neeeded

function var_dump_improved()
{
   foreach (func_get_args() as $arg) {
       if ($args instanceof Doctrine_Collection) {
          print_r($arg);
       } else if ( $arg instanceof Traversable || is_array($arg) ) {
          // do a foreach and recall var_dump_improved on subelements
       } else if (...) {
          // other types
       } 
   }   
}

وبعض وظيفة عودي إلى تصحيح مع مستويات التداخل ماكس هنا

http://php.net/manual/en/function.var- dump.php

ونظرة على التعليقات، والبحث عن "عودية"

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