علامات الاقتباس المزدوجة أو المفردة في PHP. علامات الاقتباس المزدوجة والمفردة في PHP

27.06.2020

إن أبسط طريقة لتعريف سلسلة ما هي وضعها بين علامات اقتباس مفردة (الحرف " ).

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

صدى صوت "هذه سلسلة بسيطة";

صدى صوت "يمكنك أيضًا الإدراج في السطور
حرف السطر الجديد مثل هذا،
هذا جيد"
;

// المخرجات: قال أرنولد ذات مرة: "سأعود"
صدى صوت "في أحد الأيام قال أرنولد: "سأعود".";

صدى صوت "هل قمت بحذف C:\\*.*؟";

// المخرجات: هل قمت بحذف C:\*.*؟
صدى "هل قمت بحذف C:\*.*؟" ;

// المخرجات: لن يتم توسيع هذا: \n السطر الجديد
صدى صوت "لن يتم توسيع هذا: \n السطر الجديد";

// المخرجات: لم يتم توسيع $expand و$ أي من المتغيرات
صدى صوت "$expand و$لا يتم توسيع أي من المتغيرات";
?>

التنصيص

إذا كانت السلسلة محاطة بعلامتي اقتباس مزدوجتين ()، يتعرف PHP على المزيد من تسلسلات الهروب للأحرف الخاصة:

تسلسلات الهروب
التبعية معنى
السطر الجديد (LF أو 0x0A (10) في ASCII)
\ ص عودة السطر (CR أو 0x0D (13) في ASCII)
\ ر علامة تبويب أفقية (HT أو 0x09 (9) في ASCII)
\الخامس علامة التبويب العمودية (VT أو 0x0B (11) في ASCII) (منذ PHP 5.2.5)
حرف الهروب (ESC أو 0x1B (27) في ASCII) (منذ PHP 5.4.4)
\F تغذية الصفحة (FF أو 0x0C (12) في ASCII) (منذ PHP 5.2.5)
\\ شرطة مائلة عكسية
\$ علامة الدولار
\" اقتباس مزدوج
\{1,3} تسلسل من الأحرف المقابلة للتعبير العادي للحرف في نظام الأرقام الثماني
\س(1,2) تسلسل الأحرف المطابق للتعبير العادي للحرف بالتدوين السداسي العشري

كما هو الحال مع السلسلة المضمنة بين علامات اقتباس مفردة، فإن الهروب من أي حرف سيؤدي أيضًا إلى إخراج الشرطة المائلة العكسية نفسها. قبل PHP 5.1.1، تم إدخال الشرطة المائلة العكسية \($فار)لم يتم نشره.

هيريدوك

الطريقة الثالثة لتعريف السلاسل هي استخدام صيغة Heredoc: <<< . بعد عامل التشغيل هذا، يجب عليك تحديد معرف، ثم تغذية سطر. بعد ذلك يأتي السطر نفسه، ثم نفس المعرف، لإغلاق الإدراج.

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

انتباه

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

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

لا يمكن استخدام Heredoc لتهيئة حقول الفئة. بدءًا من PHP 5.3، ينطبق هذا القيد فقط على المستندات التي تحتوي على متغيرات.

المثال رقم 1 مثال خاطئ

فئة فو(
شريط $ العام =<<حاجِز
محكمة تكافؤ الفرص؛
}
?>

يتصرف نص Heredoc بنفس الطريقة التي تعمل بها السلسلة في علامات الاقتباس المزدوجة، دون وجودها. هذا يعني أنك لا تحتاج إلى الهروب من علامات الاقتباس في Heredoc، ولكن لا يزال بإمكانك استخدام تسلسل الهروب أعلاه. تتم معالجة المتغيرات، ولكن عليك أن تكون حذرًا عند استخدام المتغيرات المعقدة داخل Heredoc كما هو الحال عند العمل مع السلاسل.

المثال رقم 2 مثال على تعريف سلسلة متوارثة

$ شارع =<<خط المثال،
يغطي عدة خطوط
باستخدام بناء الجملة heredoc.
التخلص من الذخائر المتفجرة؛

فئة فو
{
فار $foo ;
فار $ بار ;

الدالة فو ()
{
$this -> foo = "Foo" ;
$هذا->
}
}

$foo = جديد foo();
$name = "MyName" ;

صدى صوت<<اسمي "اسم $". أكتب $foo -> foo .
الآن أنا أستنتج
( $foo -> شريط [ 1 ]) .
يجب أن يؤدي هذا إلى إخراج الحرف الكبير "A": \x41
محكمة تكافؤ الفرص؛
?>

اسمي اسمي". أنا أكتب فو. الآن، أنا إخراج Bar2. يجب أن يؤدي هذا إلى إخراج حرف كبير "A": A

من الممكن أيضًا استخدام صيغة Heredoc لتمرير البيانات عبر وسيطات الوظيفة:

منذ الإصدار 5.3.0، أصبح من الممكن تهيئة المتغيرات الثابتة وخصائص/ثوابت الفئة باستخدام صيغة Heredoc:

المثال رقم 4: استخدام heredoc لتهيئة المتغيرات الثابتة

// المتغيرات الثابتة
الدالة فو ()
{
شريط $ ثابت =<<لا يوجد شيء هنا...
ملصق؛
}

// خصائص/ثوابت الفئة
فئة فو
{
شريط ثابت =<<مثال على استخدام ثابت
فوبار؛

عام $باز =<<مثال على استخدام الحقل
فوبار؛
}
?>

اعتبارًا من PHP 5.3.0، يمكنك أيضًا إحاطة معرف Heredoc بعلامات اقتباس مزدوجة:

Nowdoc

Nowdoc هو نفسه بالنسبة للسلاسل ذات علامات الاقتباس المفردة كما هو الحال مع السلاسل ذات علامات الاقتباس المزدوجة. Nowdoc مشابه لـheredoc، لكن بداخله لا يتم إجراء أي بدائل. يعد هذا التصميم مثاليًا لتضمين كود PHP أو كتل نصية كبيرة أخرى دون الحاجة إلى الهروب منه. في هذا يشبه إلى حد ما بنية SGML من خلال الإعلان عن كتلة نصية غير مخصصة للمعالجة.

تتم الإشارة إلى Nowdoc بنفس التسلسل <<< ، والذي يتم استخدامه فيheredoc، ولكن المعرف التالي محاط بعلامات اقتباس مفردة، على سبيل المثال، <<<"EOT" . جميع الشروط التي تنطبق على معرفات heredoc تنطبق أيضًا على nowdoc، خاصة تلك التي تنطبق على معرف الإغلاق.

المثال رقم 6 مثال Nowdoc

$ شارع =<<<"EOD"
مثال النص،
تمتد لعدة خطوط
باستخدام بناء الجملة nowdoc.
التخلص من الذخائر المتفجرة؛

/* مثال أكثر تعقيدًا مع المتغيرات. */
فئة فو
{
عام $foo ;
شريط $ العام ؛

الدالة فو ()
{
$this -> foo = "Foo" ;
$this -> bar = array("Bar1" , "Bar2" , "Bar3" );
}
}

$foo = جديد foo();
$name = "MyName" ;

صدى صوت<<<"EOT"
اسمي "اسم $". أقوم بطباعة $foo->foo.
الآن أقوم بطباعة ($foo->bar).
لا ينبغي أن يُخرج هذا حرفًا كبيرًا "A": \x41
محكمة تكافؤ الفرص؛
?>

نتيجة تشغيل هذا المثال:

اسمي "اسم $". أقوم بطباعة $foo->foo. الآن أقوم بطباعة ($foo->bar). لا ينبغي أن يُخرج هذا حرفًا كبيرًا "A": \x41

تعليق:

على عكس Heredoc، يمكن استخدام nowdoc في أي سياق يحتوي على بيانات ثابتة. مثال نموذجي لتهيئة حقول الفئة أو الثوابت:

المثال رقم 7 مثال على استخدام البيانات الثابتة

فئة فو(
شريط $ العام =<<<"EOT"
حاجِز
محكمة تكافؤ الفرص؛
}
?>

تعليق:

تمت إضافة دعم nowdoc في PHP 5.3.0.

التعامل مع المتغيرات

إذا تم تحديد سلسلة بين علامتي اقتباس مزدوجتين، أو باستخدام heredoc، فستتم معالجة المتغيرات الموجودة بداخلها.

هناك نوعان من بناء الجملة: بسيط ومعقد. بناء الجملة البسيط أسهل وأكثر ملاءمة. يجعل من الممكن معالجة متغير، قيمة صفيف ( مجموعة مصفوفة) أو خصائص الكائن ( هدف) بأقل جهد.

يمكن التعرف على بناء الجملة المعقد من خلال الأقواس المتعرجة المحيطة بالتعبير.

بناء جملة بسيط

إذا واجه المترجم علامة الدولار ( $ )، فهو يلتقط أكبر عدد ممكن من الأحرف لتكوين اسم متغير صالح. إذا كنت تريد تحديد نهاية الاسم، فقم بإحاطة اسم المتغير بأقواس متعرجة.

عصير $ = "تفاحة" ;

صدى "لقد شرب بعض عصير العصير." . PHP_EOL ;
// لا يعمل، "s" هو حرف صالح لاسم المتغير،
// لكن المتغير الخاص بنا يدعى $juice.
صدى "لقد شرب بعض العصير المصنوع من العصائر $." ;
?>

نتيجة تشغيل هذا المثال:

كان يشرب بعض عصير التفاح. شرب بعض العصير المصنوع من .

عنصر المصفوفة ( مجموعة مصفوفة) أو خاصية الكائن ( هدف). في مؤشرات المصفوفة يوجد قوس مربع للإغلاق ( ] ) يمثل نهاية تعريف الفهرس. تنطبق نفس القواعد على خصائص الكائن كما تنطبق على المتغيرات البسيطة.

المثال رقم 8 مثال بسيط على بناء الجملة

$juices = array("apple" , "orange" , "koolaid1" => "purple" );

صدى "لقد شرب بعض العصائر $ عصير [ 0 ]." . PHP_EOL ;
صدى "لقد شرب بعض العصائر $ [1] عصير." . PHP_EOL ;
صدى "لقد شرب بعض عصير $ عصير [koolaid1]." . PHP_EOL ;

شعب الطبقة (
عام $john = "جون سميث" ;
public $jane = "جين سميث" ;
public $robert = "Robert Paulsen" ;

عام $smith = "Smith" ;
}

$people = أشخاص جدد();

صدى "$people -> شرب جون بعض العصائر $ [ 0 ] عصير." . PHP_EOL ;
echo " $people -> john ألقى التحية على $people -> jane ." . PHP_EOL ;
echo "$people -> زوجة جون استقبلت $people -> روبرت." . PHP_EOL;
echo " $people -> روبرت يرحب بالشخصين $people -> smiths ." ; // لن ينجح
?>

نتيجة تشغيل هذا المثال:

كان يشرب بعض عصير التفاح. كان يشرب بعض عصير البرتقال. شرب بعض العصير الأرجواني. شرب جون سميث بعض عصير التفاح. ثم ألقى جون سميث التحية على جين سميث. قامت زوجة جون سميث بإلقاء التحية على روبرت بولسن، كما ألقى روبرت بولسن التحية على الاثنين.

لأي شيء أكثر تعقيدًا، استخدم بناء الجملة المعقد.

بناء جملة معقد (مجعد).

ويسمى معقدا ليس لأنه من الصعب فهمه، ولكن لأنه يسمح باستخدام التعبيرات المعقدة.

يمكن تمثيل أي متغير عددي أو عنصر صفيف أو خاصية كائن تم تعيينها لسلسلة في سلسلة باستخدام بناء الجملة هذا. ما عليك سوى كتابة التعبير بنفس الطريقة التي تكتب بها خارج السطر ثم لفه { و } . بسبب ال { لا يمكن الهروب منه، ولن يتم التعرف على بناء الجملة هذا إلا عندما $ يتبع مباشرة { . يستخدم {\$ لطباعة {$ . بعض الأمثلة التوضيحية:

// إظهار كافة الأخطاء
error_reporting(E_ALL);

$عظيم = "عظيم" ;

// لا يعمل، المخرجات: هذا (رائع)
صدى "هذا ($عظيم)" ;

// يعمل، المخرجات: هذا عظيم
صدى "هذا ( $عظيم ) " ;
صدى "هذا $(رائع)" ;

// يعمل
صدى صوت "هذه الساحة واسعة( $square -> width ) 00 سنتيمتر." ;

// يعمل، الكلمات الرئيسية المقتبسة تعمل فقط مع بناء جملة الأقواس المتعرجة
echo "هذا يعمل: ( $arr [ "key" ]) " ;

// يعمل
echo "هذا يعمل: ( $arr [ 4 ] [ 3 ]) " ;

// هذا غير صالح لنفس السبب مثل $foo بالخارج
// خطوط. وبعبارة أخرى، فإنه سيظل يعمل،
// ولكن بما أن PHP تبحث عن الثابت foo أولاً، فسيؤدي ذلك إلى حدوث خطأ
// خطأ في المستوى E_NOTICE (ثابت غير محدد).
صدى صوت "فإنه ليس من حق:( $arr [ foo ] [ 3 ]) " ;

// يعمل. عند استخدام المصفوفات متعددة الأبعاد داخليًا
// تستخدم الخطوط دائمًا الأقواس المتعرجة
echo "هذا يعمل: ( $arr [ "foo" ] [ 3 ]) " ;

// يعمل.
صدى "هذا يعمل:" . $arr [ "foo" ][ 3 ];

صدى صوت "هذا يعمل أيضًا:( $obj -> القيم [ 3 ] -> الاسم ) " ;

صدى صوت "هذه هي قيمة المتغير المسمى$name : ($( $name )) " ;

صدى صوت "هذه هي قيمة اسم المتغير الذي يُرجعه getName():($( getName ())) " ;

صدى صوت "هذه هي قيمة المتغير بالاسم الذي يُرجعه \$object->getName():($( $object -> getName ())) " ;

// لا يعمل، المخرجات: هذا ما يُرجعه getName(): (getName())
صدى صوت "هذا ما يُرجعه getName(): (getName())";
?>

من الممكن أيضًا الوصول إلى خصائص الكائن داخل السلاسل باستخدام بناء الجملة هذا.

فئة فو(
var $bar = "أنا بار." ;
}

$foo = جديد foo();
$بار = "شريط" ;
$baz = array("foo" , "bar" , "baz" , "quux" );
صدى "( $foo -> $bar ) \n" ;
echo "( $foo -> $baz [ 1 ]) \n" ;
?>

نتيجة تشغيل هذا المثال:

أنا بار. أنا بار.

تعليق:

تعمل الوظائف واستدعاءات الأساليب ومتغيرات الفئة الثابتة وثوابت الفئة داخليًا {$} ، بدءًا من PHP 5. ومع ذلك، سيتم التعامل مع القيمة المقدمة كاسم متغير في نفس سياق السطر الذي تم تعريفها فيه. استخدام الأقواس المتعرجة المفردة ( {} ) لن يعمل للوصول إلى قيم الوظائف أو الأساليب أو ثوابت الفئة أو متغيرات الفئة الثابتة.

// إظهار كافة الأخطاء
error_reporting(E_ALL);

البيرة الصف (
const softdrink = "rootbeer" ;
عام ثابت $ale = "ipa" ؛
}

$rootbeer = "A & W" ;
$ipa = "ألكسندر كيث" ;

// هذا يعمل، المخرجات: أود A & W
echo "أريد ($( beers :: softdrink )) \n" ;

// هذا يعمل أيضًا، المخرجات: أرغب في الحصول على مخرجات Alexander Keith
echo "أريد ($( beers: $ale )) \n" ;
?>

الوصول إلى حرف في سلسلة وتغييره

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

تعليق: يمكن أيضًا الوصول إلى حرف في سلسلة باستخدام الأقواس المتعرجة، على سبيل المثال $str(42) .

انتباه

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

انتباه

السلاسل النصية في PHP هي مصفوفات داخلية من البايتات. ونتيجة لذلك، فإن الوصول إلى سلسلة أو تعديلها عند الإزاحة ليس إجراءً آمنًا للتشفير متعدد البايت، ويجب أن يتم ذلك فقط باستخدام السلاسل ذات الترميزات أحادية البايت، مثل ISO-8859-1.

المثال رقم 9 بعض أمثلة السلاسل

// احصل على الحرف الأول من السلسلة
$str = "هذا اختبار." ;
$first = $str [ 0 ];

// احصل على الحرف الثالث من السلسلة
$الثالث = $str [ 2 ];

// احصل على الحرف الأخير من السلسلة
$str = "لا يزال هذا اختبارًا." ;
$last = $str [ strlen ($str ) - 1 ];

// تغيير الحرف الأخير من السطر
$str = "أنظر إلى البحر" ;
$str [ strlen ($str )- 1 ] = "e" ;

?>

اعتبارًا من PHP 5.4، يجب تحديد الإزاحة في السلسلة كعدد صحيح أو سلسلة تحتوي على أرقام، وإلا سيتم إصدار تحذير. تم الإزاحة مسبقًا بواسطة سلسلة مثل "فو"، دون سابق إنذار تم تحويله إلى 0 .

المثال رقم 10: الاختلافات بين PHP 5.3 وPHP 5.4

$str = "اي بي سي" ;

Var_dump($str["1"]);
var_dump (isset($str [ "1" ]));

Var_dump($str["1.0"]);
var_dump (isset($str [ "1.0" ]));

Var_dump($str["x"]);
var_dump (isset($str [ "x" ]));

Var_dump($str["1x"]);
var_dump (isset($str [ "1x" ]));
?>

نتيجة تشغيل هذا المثال في PHP 5.3:

سلسلة (1) "ب" منطقي (صحيح) سلسلة (1) "ب" منطقي (صحيح) سلسلة (1) "أ" منطقي (صحيح) سلسلة (1) "ب" منطقي (صحيح)

نتيجة تشغيل هذا المثال في PHP 5.4:

سلسلة (1) "b" bool(true) تحذير: إزاحة سلسلة غير قانونية "1.0" في /tmp/t.php على السطر 7 سلسلة (1) "b" bool(false) تحذير: إزاحة سلسلة غير قانونية "x" في / tmp/t.php على السطر 9 سلسلة (1) "أ" منطقي (خطأ) سلسلة (1) "ب" منطقي (خطأ)

تعليق:

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

تعليق:

أضاف PHP 5.5 دعمًا للوصول إلى الأحرف في سلسلة حرفية باستخدام بناء الجملة أو {} .

هناك العديد من الوظائف المفيدة لتعديل السلاسل.

تم وصف الوظائف الأساسية في القسم الخاص بوظائف السلسلة، وللبحث المتقدم والاستبدال، التعبير العادي أو وظائف التعبير العادي المتوافقة مع Perl.

تحويل إلى سلسلة

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

يتم دائمًا تحويل المصفوفات إلى سلسلة "مجموعة مصفوفة"، لذلك لا يمكنك عرض محتويات المصفوفة ( مجموعة مصفوفة)، استخدام صدى صوتأو مطبعةلنرى ما يحتويه. لعرض عنصر واحد، استخدم شيئا من هذا القبيل صدى $arr["foo"]. انظر أدناه للحصول على نصائح حول كيفية عرض/عرض كل المحتوى.

تم دائمًا تحويل الكائنات في PHP 4 إلى سلسلة "هدف". إذا كنت تريد عرض قيم حقول الكائن ( هدف) لأغراض التصحيح، تابع القراءة. إذا كنت ترغب في الحصول على اسم فئة الكائن المطلوب، استخدم get_class(). منذ PHP 5، أصبح الأسلوب __toString متاحًا أيضًا.

باطليتم تحويله دائمًا إلى السلسلة الفارغة.

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

يمكن تحويل معظم القيم في PHP إلى سلسلة للتخزين المستمر. تسمى هذه الطريقة بالتسلسل ويمكن إجراؤها باستخدام الوظيفة تسلسل (). بالإضافة إلى ذلك، إذا كان تثبيت PHP لديك يدعم WDDX، فمن الممكن أيضًا إجراء تسلسل إلى بنية XML.

تحويل السلاسل إلى أرقام

إذا تم التعرف على السلسلة كقيمة رقمية، فسيتم تحديد القيمة والنوع الناتجين على النحو التالي.

إذا كانت السلسلة لا تحتوي على أي من الأحرف "." أو "e" أو "E"، وتقع قيمة الرقم ضمن نطاق الأعداد الصحيحة (المحددة PHP_INT_MAX)، سيتم التعرف على السلسلة كعدد صحيح ( عدد صحيح). وفي جميع الحالات الأخرى يعتبر رقم النقطة العائمة ( يطفو).

يتم تحديد القيمة بواسطة بداية السلسلة. إذا بدأ السطر بقيمة رقمية صالحة، فسيتم استخدام هذه القيمة. وإلا ستكون القيمة 0 (صفر). القيمة الرقمية الصالحة هي رقم واحد أو أكثر (قد يحتوي على علامة عشرية)، مسبوقة اختياريًا بعلامة، متبوعة بأس اختياري. الأس هو "e" أو "E" متبوعًا برقم واحد أو أكثر.

$foo = 1 + "10.5" ; // $foo عائم (11.5)
$foo = 1 + "-1.3e3" ; // $foo هو عدد عائم (-1299)
$foo = 1 + "bob-1.3e3" ; // $foo عدد صحيح (1)
$foo = 1 + "bob3" ; // $foo عدد صحيح (1)
$foo = 1 + "10 خنازير صغيرة" ; // $foo عدد صحيح (11)
$foo = 4 + "10.2 الخنازير الصغيرة" ; // $foo عائم (14.2)
$foo = "10.0 خنازير" + 1 ; // $foo عائم (11)
$foo = "10.0 خنازير" + 1.0 ؛ // $foo عائم (11)
?>

لمزيد من المعلومات حول هذا التحويل، راجع القسم الخاص بـ strtod(3) في وثائق Unix.

إذا كنت تريد اختبار أي من الأمثلة في هذا القسم، قم بنسخه ولصقه مع السطر التالي لمعرفة ما سيحدث:

صدى "\$foo== $foo ؛ اكتب: " . gettype ($foo). "
\ن" ؛
?>

لا تتوقع الحصول على رمز الحرف عن طريق تحويله إلى عدد صحيح (كما هو الحال، على سبيل المثال، في لغة C). لتحويل الأحرف إلى رموز ASCII الخاصة بها والعودة إليها، استخدم الوظائف أورد ()و مركز حقوق الإنسان ().

تفاصيل تنفيذ نوع السلسلة

نوع السلسلة ( خيط) في PHP يتم تنفيذه كمصفوفة من البايتات وعدد صحيح يحتوي على طول المخزن المؤقت. ولا تحتوي على أي معلومات حول كيفية تحويل هذه البايتات إلى أحرف، وترك هذه المهمة للمبرمج. لا توجد أية قيود على محتويات السلسلة، مثل بايت ذو قيمة 0 يمكن تحديد موقع ("NUL" بايت) في أي مكان (ومع ذلك، انتبه إلى أن بعض الوظائف، كما هو مذكور في هذا الدليل، ليست "آمنة ثنائية"، أي يمكنها تمرير سلاسل إلى المكتبات التي تتجاهل البيانات بعد NUL -byte).

تشرح طبيعة نوع السلسلة سبب عدم احتواء PHP على نوع "بايت" منفصل - فالسلاسل تلعب هذا الدور. الوظائف التي تقوم بإرجاع بيانات غير نصية - على سبيل المثال، دفق بيانات عشوائي يتم قراءته من مأخذ توصيل الشبكة - لا تزال تقوم بإرجاع السلاسل.

نظرًا لحقيقة أن لغة PHP لا تفرض تشفيرًا محددًا للسلاسل، فقد يتساءل المرء عن كيفية تشفير السلسلة الحرفية. على سبيل المثال، الخط "á" مقابل "\xE1"(ايزو-8859-1)، "\xC3\xA1"(UTF-8، نموذج التطبيع C)، "\x61\xCC\x81"(UTF-8، نموذج التطبيع D) أو بعض التمثيلات المحتملة الأخرى؟ الجواب هو أنه سيتم ترميز السلسلة بالطريقة التي تمت كتابتها بها في ملف البرنامج النصي. وبالتالي، إذا كان البرنامج النصي مكتوبًا بترميز ISO-8859-1، فسيتم ترميز السلسلة بترميز ISO-8859-1، وما إلى ذلك. ومع ذلك، لا تنطبق هذه القاعدة عند تمكين وضع Zend Multibyte: في هذه الحالة، يمكن كتابة البرنامج النصي بأي ترميز (إما محدد بشكل صريح أو محدد تلقائيًا)، ثم تحويله إلى ترميز داخلي محدد، والذي سيتم استخدامه لاحقًا لـ حرفية السلسلة. يرجى ملاحظة أن تشفير البرنامج النصي (أو التشفير الداخلي في حالة تمكين Zend Multibyte) له بعض القيود: يجب أن يكون التشفير دائمًا مجموعة شاملة من ASCII، مثل UTF-8 أو ISO-8859-1. لاحظ أيضًا أن الترميزات المعتمدة على الحالة، حيث يمكن استخدام نفس قيم البايت في حالة التحول الأولية وغير الأولية، يمكن أن تسبب مشاكل.

بالطبع، لكي تكون وظائف السلسلة مفيدة، يجب أن تضع بعض الافتراضات حول تشفير السلسلة. لسوء الحظ، من بين وظائف PHP هناك مجموعة واسعة من الأساليب لحل هذه المشكلة:

  • تفترض بعض الوظائف أن السلسلة مشفرة بتشفير أحادي البايت، لكنها لا تحتاج إلى تفسير البايتات كأحرف محددة لتعمل بشكل صحيح. وتشمل هذه الفئة، على سبيل المثال، فرعية (), ستبوس (), سترلين ()و ستركمب (). طريقة أخرى للتفكير في هذه الوظائف هي أنها تعمل على مخازن الذاكرة المؤقتة، أي. أنها تعمل مباشرة مع البايتات وإزاحاتها. تعويضات.
  • تتوقع الوظائف الأخرى أن يتم تمرير الترميز كمعلمة، وربما بافتراض بعض الترميز الافتراضي إذا لم يتم تحديد معلمة ترميز. هذه الوظيفة
  • وأخيرًا، هناك وظائف تفترض أن السلسلة تستخدم ترميزًا محددًا، عادةً UTF-8. تقع معظم الوظائف من امتدادات intl وPCRE هنا (في الحالة الأخيرة، فقط عند تحديد المُعدِّل ش). على الرغم من أن هذا يتم عن قصد، إلا أن الوظيفة utf8_decode()يعني ترميز UTF-8، و utf8_encode()- إسو-8859-1.

في النهاية، كتابة البرامج الصحيحة التي تعمل مع Unicode تعني تجنب الوظائف التي لا تعمل مع Unicode بعناية ومن المحتمل أن تؤدي إلى تلف البيانات، واستخدام وظائف صالحة بدلاً من ذلك، عادةً من الامتدادات intl وmbstring. ومع ذلك، يعد استخدام الوظائف التي تدعم Unicode بداية جيدة. بغض النظر عن الميزات التي توفرها اللغة، فمن الضروري معرفة مواصفات Unicode نفسها. على سبيل المثال، إذا افترض برنامج ما أن هناك أحرفًا صغيرة وكبيرة فقط في اللغة، فهو يرتكب خطأً كبيرًا.

ليس سراً أن علامات الاقتباس في PHP يمكن أن تكون مفردة أو مزدوجة. دعنا نكتشف متى تكون استخدامات معينة لعلامات الاقتباس أكثر ملاءمة.

ونقلت واحدة

إن أبسط طريقة لتعريف سلسلة هي إحاطة النص بعلامات اقتباس مفردة.

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

لا تعمل تسلسلات الهروب ضمن علامات الاقتباس المفردة.

أمثلة على استخدام علامات الاقتباس المفردة:

التنصيص

إذا قمت بتمييز نص بعلامات اقتباس مزدوجة، فسيتم تعريف السلسلة بنفس الطريقة كما هو الحال مع علامات الاقتباس المفردة. ولكن بالطبع هناك اختلافات بين الاقتباسات.

الوضع مع علامات الاقتباس الهارب هو نفسه مع علامات الاقتباس المفردة.

تتعرف السلسلة المحاطة بعلامتي اقتباس مزدوجتين على معظم تسلسلات الهروب للأحرف الخاصة.

الفرق الأكثر أهمية هو حقيقة أن علامات الاقتباس المزدوجة تتعامل مع المتغيرات.

أمثلة على استخدام علامات الاقتباس المزدوجة:

دعونا نركز على حقيقة أن السلاسل ذات علامات الاقتباس المزدوجة تتعامل مع المتغيرات.

ماذا يحدث عند معالجة السلسلة؟ مترجم تحقق من كل سلسلة بعلامات اقتباس مزدوجة للمتغيرات، أي. يحدث التحليل القسري، الأمر الذي يستغرق وقتًا إضافيًا. نعم، غالبًا ما يكون هذا جزءًا من الثانية، ولكن يجب فهم الحقيقة نفسها. أي أنه إذا قارنت معالجة سلسلة واحدة بعلامات اقتباس مختلفة (بدون متغيرات بالطبع)، فمن المؤكد أن السلسلة ذات علامات الاقتباس المفردة ستتم معالجتها بشكل أسرع.

العمليات الحسابية

لقد وجدت حسابات مثيرة للاهتمام حول هذا الموضوع على موقع ProfiPHP. كتب المؤلف نصًا بسيطًا يحسب به الوقت اللازم لمعالجة السلاسل.

أنا لست خبيرًا في برمجة PHP، لكني في حيرة من أمري لماذا أرى بعض التعليمات البرمجية في PHP مع سلسلة محاطة بعلامات اقتباس مفردة وأحيانًا مزدوجة.

أعرف فقط أنه في لغة .NET أو C، إذا كانت ضمن علامات اقتباس مفردة، فهذا يعني أنها حرف وليست سلسلة.

حل

ما يجب أن تعرفه

$a = "الاسم"; $b = "$a الخاص بي"; == "اسمي" $c = "اسمي $a"; != "اسمي"

في PHP، يستخدم الأشخاص علامات الاقتباس المفردة لتحديد سلسلة ثابتة مثل "a" و"my name" و"abc xyz" أثناء استخدام علامات الاقتباس المزدوجة لتحديد سلسلة تحتوي على معرف مثل "a $b $c $d" .

والشيء الآخر هو

صدى "اسمي"؛

اسرع من

صدى "اسمي"؛

صدى "بلدي". $أ؛

ابطأ من

صدى "بلدي $a"؛

وهذا صحيح بالنسبة للسلاسل الأخرى المستخدمة.

في PHP، يتم التعامل مع النص الموجود بين علامات الاقتباس المفردة كقيمة سلسلة، بينما يقوم النص الموجود بين علامات الاقتباس المزدوجة بتحليل المتغيرات عن طريق استبدال قيمتها ومعالجتها.

$test = "متغير"; صدى "مرحبًا سيد $test"; // سيكون الناتج: مرحبًا بالسيد المتغير echo "Hello Mr $test"; // سيكون الناتج: مرحبًا يا سيد $test

هنا يقوم الاقتباس المزدوج بتوزيع القيمة ويتم التعامل مع الاقتباس الفردي كقيمة سلسلة (بدون تحليل المتغير $test.)

كلا النوعين من الأحرف المتداخلة عبارة عن سلاسل. من الملائم استخدام نوع واحد من الاقتباس لإبرام نوع آخر من الاقتباس. """ و""". الفرق الأكبر بين أنواع الاقتباس هو أن مراجع المعرفات المتداخلة يتم استبدالها داخل علامات الاقتباس المزدوجة بدلاً من داخل علامات الاقتباس المفردة.

قيم سلسلة النوع هي سلاسل نصية (سلاسل قصيرة). السلسلة عبارة عن سلسلة من صفر أو أكثر من الأحرف. تتضمن الأحرف الحروف والأرقام وعلامات الترقيم والأحرف الخاصة والمسافات.

يمكن تعريف السلسلة بأربع طرق مختلفة:

  • التنصيص
  • ونقلت واحدة
  • بناء الجملة هيردوك
  • بناء جملة nowdoc

سلسلة في علامات الاقتباس المزدوجة

سلسلة في علامات اقتباس مزدوجة:

يمكنك استخدام تسلسلات الهروب في سلاسل ذات علامات اقتباس مزدوجة. تسلسل التحكم- هذه أحرف خاصة مصممة لتنسيق إخراج النص. تسلسلات الهروب التالية متوفرة في PHP:

الخاصية الرئيسية للسلاسل ذات علامات الاقتباس المزدوجة هي القدرة على التعامل مع المتغيرات داخل السلاسل.


علامة الدولار: \$";

يمكن أن تحتوي السلاسل النصية المضمنة بين علامتي اقتباس مزدوجتين على أحرف اقتباس مفردة:

صدى "اقتباس مفرد: "";

سلسلة في علامات الاقتباس المفردة (الفواصل العليا)

سلسلة في علامات اقتباس مفردة:

$str = "سلسلة"; echo "يمكن تقسيم السطر الكبير إلى عدة أسطر صغيرة لتسهيل القراءة.";

على عكس السلاسل ذات علامات الاقتباس المزدوجة وبناء الجملة الموروثة، لا تتم معالجة المتغيرات وتسلسلات التحكم (مع استثناء واحد) المضمنة في علامات اقتباس مفردة. هذا يعني أنه سيتم تفسيرها على أنها أحرف سلسلة عادية:

$num = 10; صدى "الرقم: $num
علامة الدولار: \$";

لتتمكن من استخدام علامات الاقتباس المفردة في سلسلة محاطة بعلامات اقتباس مفردة، تحتاج إلى الهروب منها باستخدام شرطة مائلة عكسية (\"). إذا كنت تريد كتابة الشرطة المائلة العكسية نفسها، فستحتاج إلى تكرارها (\\):

صدى "استخدم علامات الاقتباس \"المفردة\" بالداخل"; صدى "الخط المائل العكسي: \\";

يمكن أن تحتوي السلاسل النصية المضمنة بين علامات اقتباس مفردة على أحرف اقتباس مزدوجة:

صدى "اقتباس مزدوج: ""؛

بناء جملة هيريدوك

يعد بناء جملة Heredoc طريقة بديلة لكتابة السلاسل.

تعمل السلسلة المعرفة باستخدام بناء جملة Heredoc بنفس الطريقة التي تعمل بها السلسلة المضمنة بين علامتي اقتباس مزدوجتين. الفرق بين Heredoc والسلسلة ذات علامات الاقتباس المزدوجة هو أنه مع Heredoc ليست هناك حاجة للهروب من علامات الاقتباس المزدوجة.

يبدأ بناء جملة Heredoc بثلاثة أحرف<<< , после которых должен быть указан произвольный идентификатор (назовём его открывающим). Идентификатор может быть указан как в двойных кавычках, так и без них. حالايجب أن يتبع المعرف سطر جديد، ولا ينبغي أن تكون هناك أحرف أخرى غير السطر الجديد بعد المعرف، وإلا سيحدث خطأ. بعد ذلك يأتي محتوى السلسلة نفسه. بعد محتوى السلسلة، في سطر منفصل، يجب تحديد معرف الإغلاق (كما هو الحال بعد<<<). Перед ним и после него не должно быть никаких пробелов или других символов, за исключением точки с запятой. Если это правило нарушено, то считается, что закрывающий идентификатор отсутствует и будет вызвана ошибка:

<<

بناء جملة Nowdoc

يعد بناء جملة Nowdoc، مثل Heredoc، طريقة بديلة لكتابة السلاسل.

تعمل السلسلة المحددة باستخدام بناء جملة Nowdoc بنفس الطريقة التي تعمل بها السلسلة المضمنة بين علامتي اقتباس مفردتين. الفرق بين Nowdoc والسلسلة ذات علامات الاقتباس المفردة هو أنه مع Nowdoc ليست هناك حاجة للهروب من علامات الاقتباس المفردة.

بناء جملة Nowdoc مشابه لـ Heredoc، مع الاختلاف الوحيد وهو أن المعرف الافتتاحي يجب أن يكون محاطًا بعلامات اقتباس مفردة:

$num = 10؛ صدى صوت<<<"some_id" Число: $num some_id;

التعامل مع المتغيرات في السلاسل

هناك نوعان من بناء الجملة للتعامل مع المتغيرات في السلاسل: بسيطو صعب.

بناء جملة بسيط- وذلك عندما يُشار إلى اسم المتغير في السطر كما هو.

عندما يواجه المترجم علامة الدولار، فإنه يبدأ بالتحقق بشكل تسلسلي مما إذا كانت كافة الأحرف اللاحقة هي أحرف صالحة في اسم المتغير. لذلك، لتشكيل اسم متغير صالح، فإنه يلتقط أكبر عدد ممكن من الأحرف:

$str = "العالم!"; صدى "مرحبًا $str";

بناء جملة معقد- وذلك عندما يكون اسم المتغير محاطًا بأقواس متعرجة.

نظرًا لأنه لمعالجة متغير في سطر ما، يلتقط المترجم أكبر عدد ممكن من الأحرف، فهناك مواقف لا يتمكن فيها المترجم من تحديد مكان انتهاء اسم المتغير بشكل مستقل:

$sport1 = "سوف"; $sport2 = "قدم"; echo "أنا أحب $sport1ball و$sport2ball";

في هذه الحالة لن تتحقق النتيجة المرجوة لأن المترجم سيعتبر $sport1 جزءا من اسم المتغير $sport1bol، وهو غير موجود.

لإخبار المترجم بوضوح بمكان انتهاء اسم المتغير، يجب عليك وضع اسم المتغير بين قوسين متعرجين:

$sport1 = "سوف"; $sport2 = "قدم"; echo "أنا أحب $sport1)bol و ($sport2)bol.";

يمكن وضع علامة الدولار إما قبل أو بعد القوس المتعرج:

$sport1 = "سوف"; $sport2 = "قدم"; echo "أنا أحب $(sport1)bol و$sport2)bol.";

سلسلة

التسلسل هو ربط سلسلتين أو أكثر في سلسلة واحدة أكبر. يتم التسلسل باستخدام عامل التسلسل - . (نقطة). عند التسلسل، تتم إضافة كل سطر لاحق إلى نهاية السطر السابق:

سيتم تحويل أي قيمة من أي نوع متصل بسلسلة ضمنيًا إلى سلسلة ثم يتم ربطها:

"; صدى "الرقم: " . 1; ?>

سنتعامل اليوم مع علامات الاقتباس، ولكن ليست بسيطة، ولكن علامات الاقتباس في PHP بالإضافة إلى علامات الاقتباس والخيارات. PHP اقتباس واحد؟ PHP اقتباس مزدوج؟

لنبدأ بحقيقة أن PHP تسمح باستخدام علامات الاقتباس المزدوجة والمفردة.

وهناك عدة خيارات للهروب من الاقتباسات.

التنقل في الصفحة:

    أين توجد علامات الاقتباس على لوحة المفاتيح الإنجليزية؟

  1. على لوحة المفاتيح الإنجليزية، الاقتباس المفرد هو حرف صغير e -> "
    الاقتباس المزدوج هو رأس المال E -> "

    رمز Php للاقتباسات المزدوجة والمفردة

  2. وبطبيعة الحال، سوف تحتاج إلى حرف الاقتباس، أي. إذا كنت بحاجة إلى طباعة اقتباس دون تشغيله، فهذا هو الغرض من أحرف الاقتباس.

    حرف الاقتباس المزدوج:

    "

    حرف الاقتباس المفرد:

    "

    PHP الهروب يقتبس.

  3. ماذا تقصد في الواقع بالهروب من علامات الاقتباس في PHP.

    دعونا نلقي نظرة على مثال، لأنه مع الأمثلة يكون من الأسهل دائمًا فهم ما نتحدث عنه!

    لنكتب كود PHP:

    صدى "اقتباسات php" ؛

    ولكن إذا قمنا بلصق هذا الرمز هنا، فأنا أخشى أنك لن ترى هذه السطور أبدًا!؟

    لماذا؟ نعم، ببساطة لأن الكود لن يعمل -> هناك علامات اقتباس مزدوجة بالخارج والداخل

    خطأ في الهروب من اقتباس php

  4. لا يوجد خطأ منفصل لإخراج خطأ الهروب من الاقتباس، ولكن مخرجات هذا الخطأ موضحة أدناه:

    لقد صنعته خصيصًا لك، مع إدراج هذا الرمز فيه، وإذا أردت، يمكنك رؤية ما سيحدث منه!
    ماذا يخبرنا هذا الخطأ!؟

    خطأ في التحليل: خطأ في بناء الجملة، "http" (T_STRING) غير متوقع، في انتظار "" أو "؛" في المسار على رقم السطر

    خطأ في بناء الجملة (خطأ في التحليل: خطأ في بناء الجملة)، يخبرنا الكود: غير متوقع - أرى جزءًا غير متوقع من البيانات المهملة في السطر... http - هذا ليس ما كنت أتوقع رؤيته على الإطلاق...
    يجب أن يكون هناك إما إلحاق أو نهاية السطر؛

    الآن باللغة الروسية...

    أنه بعد الاقتباس المزدوج الثاني هناك بعض القمامة التي لا ينبغي أن تكون هناك! أولئك. أعطني الرموز التي أحبها... أي: بناء على متطلباته..

    وهذا ما يتوقع رؤيته..

    صدى "اقتباسات php" ؛

    بطبيعة الحال، لا أحد يكتب بهذه الطريقة، على الرغم من... من يدري...

    إذا فعلت الشيء نفسه مع علامات الاقتباس المفردة، فستحصل على اقتباس مماثل للهروب من الخطأ!

    كيفية الهروب من علامات الاقتباس المزدوجة في PHP

  5. في هذه الحالة بالذات، كيف تتخلص من الخطأ وتتجنب علامات الاقتباس المزدوجة!؟

    قبل علامات الاقتباس المزدوجة الموجودة بالداخل، تحتاج إلى وضع شرطة مائلة باتجاه اليسار:

    صدى صوت " اقتباسات PHP";

    كيفية الهروب من علامات الاقتباس المفردة في PHP

  6. إذا افترضنا أن لدينا نفس السطر الموضح أعلاه، ولكن بدلاً من علامات الاقتباس المزدوجة توجد علامات اقتباس مفردة، فإننا نفعل الشيء نفسه - قبل كل اقتباس بالداخل نضع شرطة مائلة لليسار.

    صدى صوت " اقتباسات PHP";

    استخدم علامات الاقتباس المختلفة بدلاً من الهروب

  7. بدلاً من الهروب من علامات الاقتباس، يمكنك استخدام هذا الخيار - خذ الكود أعلاه وقم بتغيير علامات الاقتباس المفردة الموجودة بالداخل إلى علامات اقتباس مزدوجة...

    صدى ""إقتباسات php"";

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

    صدى صوت " اقتباسات PHP";

    كيفية عرض اقتباسات php على الشاشة

  8. من أجل عرض علامات الاقتباس على الشاشة، هنا على الصفحة... وحتى لا تكون كود PHP - بغض النظر عن مدى غرابة ذلك! يجب تغيير علامات الاقتباس إلى كيانات html، على سبيل المثال:

    اقتباس واحد عبر كود html::

    " - اقتباس واحد " " "

    اقتباس مزدوج عبر كود html:

    " - اقتباس مزدوج " " "

    سيبدو هذا الاقتباس كاقتباس على الشاشة، لكنه لن يظهر بعد ذلك في كود Php...

    اقتباسات PHP غير صحيحة

  9. اقتباسات خاطئة - كما في تلك الرسوم المتحركة - نحل خاطئ

    يجب التعامل مع جميع أكواد PHP بعناية! على سبيل المثال، إذا كتبت شيئًا ما في Word، بعض النصوص، فقد بدأت في كتابة التعليمات البرمجية فيه، كما حدث لي في المرة الأولى.

    ولم أتمكن من فهم المشكلة - فهو حقًا لا يريد أن يريني رمزًا بسيطًا. كنت على استعداد لكسر جهاز الكمبيوتر بمطرقة ثقيلة!!!

    ولكن اتضح أن علامات الاقتباس في محرر التعليمات البرمجية تختلف عن Word. ومن المستحيل أن تفهم إذا لم تكن قد مررت به!

    فيما يلي مثال لعلامات الاقتباس في Word.