سؤال

لقد أمضيت للتو 3 ساعات أتساءل لماذا لم أستطع بدء جلسة ، ثم أدركت أنني استخدمت:

session_start;

عندما كان يجب أن أستخدم:

session_start();

لم أتلق أي رسائل خطأ على الإطلاق!

ربما بعد ذلك ، فكرت ، إنها طريقة كسول لتمييز الوظائف عن المتغيرات - ولكن تذكرت بعد ذلك أنه لا يمكن أن تكون متغيرات تتطلب $

هل يمكن لأي شخص أن يخبرني لماذا تتطلب الأقواس بعد ذلك ، ولماذا لا يتم إعطاء أي خطأ عند عدم استخدامها؟

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

المحلول

أحصل على الإشعار (بعد تعيين error_reporting E_ALL):

إشعار: استخدام Session_Start غير المحدد - المفترض 'Session_start' in /t.php على السطر 5

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

أفترض أنه إشعار بدلاً من خطأ في الخطأ بسبب التوافق مع الوراء في أن بعض التعليمات البرمجية الأقدم تميل إلى الوصول إلى المصفوفات باستخدام سلاسل غير مؤهلة والتي ستتعامل معها PHP كسلاسل مقتبسة إذا لم يكن هناك ثابت مع هذا الاسم.

$myArray[myString] = 25;

نصائح أخرى

لا يمكنك إحداث فرق بين الوظيفة وثابتة إذا لم يكن للوظيفة جنون العظمة ... لكن من الغريب أنها لا ترمي الأخطاء ... هل أطفأت أخطاء في ملف php.ini الخاص بك؟

هناك حاجة إلى أقواس لأن مواصفات لغة PHP تقول ذلك (على الرغم من أنه لا يوجد مواصفات رسمية صريحة للغة التي يمكن العثور عليها).

ما يفعله PHP عندما يواجه معرفًا غير معروف هو إخراج خطأ E_Notice لإعلامك أنه تم استخدام معرف غير معروف ، ثم تفترض أنك تقصد استخدام هذا المعرف كسلسلة.

<?php
$foo = unknown_identifier;
echo 'Now printing: ' . $foo; // prints 'Now printing: unknown_identifier' (PHP 5.2.6)
?>

السبب في أنك لا ترى أي خطأ على الأرجح لأن أخطاء E_Notice أقل من عتبة الإبلاغ عن الخطأ. يمكنك تغيير هذه العتبة باستخدام توجيه error_reporting:

<?php
error_reporting(E_ALL);

$foo = unknown_identifier;
echo 'Now printing: ' . $foo;
?>

سيؤدي ذلك إلى إخراج رسالة الخطأ "إشعار" كما تم نشره أعلاه بواسطة Yacoby.

لاحظ أنه ، بشكل مضلل ، لا يتضمن توجيه الإبلاغ عن خطأ E_all في الواقع جميع مستويات الإبلاغ في PHP 5.x. في PHP 5 ، تحتاج إلى استخدام E_ALL | E_STRICT لتمكين جميع رسائل الخطأ.

- تحرير: ضرب لكمة الكثير من الناس.

جميع اللغات التي أعرفها أو استخدمتها على الإطلاق تستخدم قوسين لوصف الوظائف سواء لم تأخذ أي معلمات (باطلة) أو تحتوي على قائمة معلمات (اختيارية أم لا). سوف تعتاد عليها. ربما يكون مخلفات من C مع كل النماذج الأولية للوظيفة وكل شيء.

بعد قولي هذا ، فإن Echo functon في PHP هي وظيفة غريبة لأنها ليست وظيفة تمامًا ولكنها عبارة عن بيان.

القي نظرة على http://en.wikipedia.org/wiki/function(computer_science)

() تشير إلى أن الوظيفة يجب أن تسمى. بدونها ، يمكنك تمرير المرجع حولها. على سبيل المثال (PHP 5.3):

$callable = session_start;
$callable();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top