اینترنت پنجره ها اندروید

نقل قول PHP، نقل قول تک، دو برابر، محافظ. تفاوت بین نقل قول های تک و دوگانه در PHP چیست؟ نقل قول های دوگانه در پی اچ پی

رشته مجموعه ای از کاراکترها است. در پی اچ پی، نماد همان بایت است، به این معنی است که دقیقا 256 شخصیت های مختلف ممکن است. همچنین به این معنی است که پی اچ پی هیچ پشتیبانی داخلی برای یونیکد ندارد "a. برخی از پشتیبانی Unicode" A فراهم می کند توابع utf8_encode () و utf8_decode ().

نکته: اگر رشته بسیار بالا باشد، هیچ مشکلی وجود ندارد. تقریبا هیچ محدودیتی در اندازه خطوط اعمال شده توسط PHP وجود ندارد، بنابراین هیچ دلیلی برای نگرانی در مورد طول آنها وجود ندارد.

نحو

    رشته را می توان به سه روش مختلف تعیین کرد.

نقل قول تک

ساده ترین راه برای تعیین رشته این است که آن را به نقل قول های تک (نماد ") نتیجه گیری کنید.

برای استفاده از یک نقل قول در داخل خط، همانطور که در بسیاری از زبان های دیگر، باید توسط نماد اسکیت معکوس (\\) پیش بینی شود، یعنی محافظت از آن. اگر غرق شدن معکوس لعنتی باید قبل از یک لحظه یا در پایان خط برود، شما باید آن را تکرار کنید. لطفا توجه داشته باشید که اگر شما سعی می کنید هر شخصیت دیگری را محافظت کنید، ویژگی سینک معکوس نیز چاپ خواهد شد! بنابراین، به عنوان یک قانون، نیازی به سپر خط معکوس خطی وجود ندارد.

نکته: در PHP 3، در این مورد، پیام E_Notice سطح صادر خواهد شد.

توجه: بر خلاف دو نحو دیگر، متغیرها و توالی های محافظتی برای کاراکترهای خاص که در خطوط محصور شده در نقل قول های تک قرار گرفته اند پردازش نمی شوند.

echo "این یک رشته ساده است"؛ echo "شما همچنین می توانید نماد یک خط جدید را به صورت طبیعی قرار دهید"؛ // خواهد شد: هنگامی که آرنولد گفت: "من به عقب برگردم" اکو "یک بار آرنولد گفت:" من برگشتم "؛ // حذف: شما حذف C: \\ *. *؟ echo "شما حذف C: \\\\ *. *؟"؛ // حذف: شما حذف C: \\ *. *؟ echo "شما حذف C: \\ *. *؟"؛ // بیرون می آید: آن را وارد نمی کند: \\ n echo خط جدید "آن را وارد نمی کند: \\ n رشته جدید"؛ // خارج از: $ expand متغیرها نیز به $ یا با echo جایگزین نمی شوند. $ expand متغیرها نیز یا جایگزین نمی شوند "

نقل قول دوگانه

اگر رشته در نقل قول های دوگانه محصور شده باشد (")، PHP تعداد بیشتری از توالی های کنترل را برای کاراکترهای خاص شناسایی می کند:

جدول 11-1. توالی های کنترل

ما تکرار می کنیم اگر می خواهید هر شخصیت دیگری را چند برابر کنید، ویژگی سینک معکوس نیز چاپ خواهد شد!

اما مهمترین ویژگی ردیف ها در دو نقل قول، پردازش متغیرها است. جزئیات بیشتر را ببینید: پردازش ردیف.

heredoc

راه دیگری برای تعریف رشته ها استفاده از heredoc-syntax است ("

شناسه بسته شدن باید در ستون اول رشته شروع شود. علاوه بر این، شناسه باید با همان قوانین نامگذاری به عنوان تمام برچسب های دیگر در PHP مطابقت داشته باشد: حاوی تنها کاراکترهای عددی و علامت زیر را شامل می شود و باید با غیر مرطوب یا زیر پایه شروع شود.

توجه

بسیار مهم است که توجه داشته باشید که رشته با شناسه بسته شدن شامل کاراکترهای دیگر نیست، به جز، احتمالا semicolons (؛). این به این معنی است که شناسه نباید با یک ضمانت وارد شود و هیچ شکاف یا زبانه زبانه قبل یا بعد از یک semicolon وجود نداشته باشد. همچنین مهم است که درک کنیم که اولین شخصیت در مقابل شناسه بسته شدن باید یک نماد یک رشته جدید تعریف شده در سیستم عامل شما باشد. به عنوان مثال، در Macintosh آن \\ r.

اگر این قانون شکسته شود و شناسه بسته شدن "خالص" نیست، اعتقاد بر این است که شناسه بسته شدن از دست رفته است و پی اچ پی ادامه خواهد یافت. اگر در این مورد شناسه بسته شدن صحیح یافت نشد، خطایی در پردازش با شماره رشته در انتهای اسکریپت ایجاد می شود.

Heredoc-Text رفتار مشابهی را به عنوان یک ردیف در نقل قول های دوگانه انجام می دهد، در حالی که آنها را ندارند. این به این معنی است که شما نیازی به سپاه پاسداران در Heredoc ندارید، اما هنوز می توانید از توالی های کنترل بالا استفاده کنید. متغیرها پردازش می شوند، اما استفاده از متغیرهای پیچیده درون Heredoc نیز باید توجه داشته باشید که هنگام کار با خطوط.

مثال 11-2 یک مثال از تعریف یک رشته Heredoc

$ str \u003d.<<foo \u003d "foo"؛ $ این-\u003e bar \u003d array ("bar1"، "bar2"، "bar3")؛ )) $ foo \u003d جدید foo ()؛ $ نام \u003d "معدن"؛ اکو<<فو در حال حاضر من ($ foo-\u003e نوار) \u200b\u200bرا به ارمغان می آورم. این باید نامه عنوان "A" را تولید کند: \\ X41 EOT؛

توجه: پشتیبانی Heredoc به PHP 4 اضافه شده است.

پردازش متغیرها

اگر رشته در نقل قول های دوگانه یا با Heredoc تعریف شده باشد، متغیرهای داخل آن پردازش می شوند.

دو نوع نحو وجود دارد: ساده و پیچیده. نحو ساده ساده تر و راحت است. این اجازه می دهد تا پردازش متغیر، مقدار آرایه (آرایه) یا خواص شیء (شی).

نحو پیچیده به PHP 4 معرفی شد و می تواند بر روی براکت های فرفری اطراف بیان شناخته شود.

نحو ساده

اگر مترجم با علامت دلار ($) مطابقت داشته باشد، بسیاری از کاراکترهای بسیاری را که ممکن است برای شکل نام متغیر صحیح شکل بگیرد. اگر می خواهید به طور دقیق پایان نام را تعریف کنید، نام متغیر را در براکت های فرفری قرار دهید.

$ beer \u003d "heineken"؛ ECHO "$ beer" طعم عالی است "؛ // works،" "این یک شخصیت نادرست برای نام اکو است" او یک متغیر $ beers "را نوشید؛ // کار نمی کند، "S" یک شخصیت وفادار برای نام متغیر اکو است "او برخی از $ (آبجو) S" را نوشید "؛ // echo "او برخی از ($ beer) را نوشیدند"؛ // آثار

یک عنصر آرایه (آرایه) یا اموال شی (شی) نیز می تواند پردازش شود. در شاخص های آرایه، براکت مربع بسته (]) پایان تعریف شاخص را نشان می دهد. برای خواص جسم، قوانین مشابه به عنوان متغیرهای ساده اعمال می شود، هرچند به عنوان متغیرها غیر ممکن است.

// این مثال ها به طور خاص در مورد استفاده از آرایه ها در داخل // خطوط است. خارج از ردیف ها همیشه کلید های رشته خود را وارد کنید // آرایه در نقل قول ها و استفاده از رشته های خارج از زمین (براکت) استفاده نکنید. // بیایید همه خطاها خطا را نشان دهیم (e_all)؛ $ fruits \u003d آرایه ("توت فرنگی" \u003d "قرمز"، "موز" \u003d\u003e "زرد")؛ // آثار، اما توجه داشته باشید که خارج از نقل قول خط کار می کند در یکی دیگر از اکو "موز $ میوه ها است."؛ // echo "یک موز ($ میوه ها [" موز "])."؛ // کار می کند، اما PHP، همانطور که در زیر شرح داده شده است، اولین جستجو / / موز ثابت. echo "موز (میوه ها) است."؛ // کار نمی کند، استفاده از براکت های فرفری. این باعث خطا پردازش می شود. echo "موز $ میوه ها [" موز "]."؛ // echo "موز" کار می کند. $ fruits ["موز"]. "."؛ // اکو در حال اجرا "این مربع $ square-\u003e عرض متر عرض است."؛ // کار نمی کند. برای راه حل، نحو پیچیده را ببینید. echo "این مربع $ مربع-\u003e عرض عرض 100 سانتی متر گسترده است."

برای چیزی دشوارتر، شما باید از نحو پیچیده استفاده کنید.

نحو پیچیده (شکل)

این سخت است زیرا در درک دشوار است، اما به این دلیل که به شما اجازه می دهد از عبارات پیچیده استفاده کنید.

در حقیقت، شما می توانید هر مقدار را به نام نام نام در رشته با این نحو فعال کنید. شما فقط بیان را همانند خارج از خط بنویسید و سپس آن را در (و) نتیجه بگیرید. از آنجا که شما نمی توانید سپر "("، این نحو تنها زمانی شناخته می شود که $ باید به طور مستقیم برای (. (استفاده از "(\\ $" یا "($" ($ "برای نمایش" ($ "). چند مثال توضیحی:

// بیایید همه خطاها خطا را نشان دهیم (e_all)؛ $ بزرگ \u003d "فوق العاده"؛ // کار نمی کند، حذف می شود: این (فوق العاده) echo "این ($ بزرگ)"؛ // کار می کند، خروج: این اکو فوق العاده است "این ($ بزرگ)"؛ echo "این $ (بزرگ)"؛ // ECHO "این عرض عرض ($ square-\u003e عرض) 00 سانتی متر را اجرا می کند." // اکو در حال اجرا "کار می کند: ($ ARR)"؛ // به همین دلیل نادرست است زیرا $ Foo نادرست است // ردیف. به عبارت دیگر، هنوز هم کار خواهد کرد، //، اما از آنجا که PHP برای اولین بار به دنبال یک ثابت Foo، آن را به نام // e_notice سطح سطح (ثابت نامحدود) تماس بگیرید. اکو "اشتباه است: ($ ARR)"؛ // آثار. هنگام استفاده از آرایه های چند بعدی، در داخل // خطوط همیشه از براکت های echo curly استفاده می کنند "این کار می کند: ($ ARR [" foo "])"؛ // آثار. اکو "این کار می کند:". $ ARR ["foo"]؛ echo "شما حتی می توانید بنویسید ($ obj-\u003e مقادیر-\u003e نام)"؛ echo "این مقدار یک متغیر به نام $ نام: ($ ($ نام))"؛

دسترسی به نماد در رشته و تغییر آن

نمادها در خطوط می توانند با تعریف افست خود نسبت به شروع رشته، از صفر، در براکت های فرفری پس از ردیف استفاده شوند.

نکته: برای اطمینان از سازگاری عقب مانده، هنوز توانایی استفاده از براکت آرایه ای را برای اهداف مشابه دارید. با این حال، با شروع از PHP 4، این نحو برای استفاده نامطلوب است.

مثال 11-3. چند نمونه از رشته

// به دست آوردن شخصیت خط اول $ str \u003d "این یک آزمون است."؛ $ first \u003d $ str (0)؛ // به دست آوردن خط سوم شخصیت $ سوم \u003d $ str (2)؛ // اخذ آخرین شخصیت خط $ str \u003d "هنوز یک آزمون است"؛ $ last \u003d $ str (strlen ($ str) -1)؛ // تغییر آخرین نماد خط $ str \u003d "نگاه کردن به دریا"؛ $ strlen (strlen ($ str) -1) \u003d "من"؛

ویژگی های مفید و اپراتورها

ردیف ها را می توان با اپراتور ترکیب کرد. " (نقطه). لطفا توجه داشته باشید که اپراتور اضافه شده "+" در اینجا کار نمی کند. برای اطلاعات بیشتر، اپراتورهای رشته را ببینید.

برای اصلاح رشته ها، بسیاری از ویژگی های مفید وجود دارد.

توابع اصلی در بخش توابع رشته، توابع عبارات منظم برای جستجوی پیشرفته و جایگزینی (در دو بخش: Perl و POSIX پیشرفته) شرح داده شده است.

همچنین توابع برای رشته های URL وجود دارد، و توابع برای رشته های رمزنگاری / رمزگشایی (MCrypt و Mhash).

در نهایت، اگر هنوز آنچه را که دنبال آن هستید پیدا نکردید، همچنین به عنوان توابع برای نوع نمادین مراجعه کنید.

تبدیل به رشته

شما می توانید یک مقدار را به یک رشته با استفاده از رشته (رشته) یا تابع Stral () تبدیل کنید. در بیان هایی که رشته ضروری است، تبدیل به طور خودکار رخ می دهد. این اتفاق می افتد زمانی که شما از توابع echo () یا چاپ () استفاده می کنید، یا هنگامی که مقدار یک متغیر را با یک رشته مقایسه می کنید. خواندن بخش های انواع و دستکاری انواع موارد زیر را درک می کند. همچنین SETTYPE را ببینید ().

Boolean (Boolean) مقدار درست به رشته "1" تبدیل می شود، و مقدار FALSE به عنوان "" (رشته خالی) نشان داده شده است. به این ترتیب، شما می توانید مقادیر را در هر دو جهت تبدیل کنید - از نوع بولین به یک رشته و بالعکس.

یک عدد صحیح (عدد صحیح) یا یک عدد نقطه شناور (شناور) به یک رشته ای که توسط تعداد متشکل از اعداد آن تشکیل شده است (از جمله شاخصی از درجه برای تعداد نقطه شناور) تبدیل می شود.

آرایه ها همیشه به رشته "آرایه" تبدیل می شوند، به طوری که شما نمی توانید محتویات آرایه (آرایه) را با استفاده از echo () یا چاپ () برای پیدا کردن آنچه که حاوی آن است، نمایش دهید. برای مشاهده یک عنصر، شما باید کاری را انجام دهید مانند echo $ Arr ["foo"]. نکات زیر را در مورد نحوه نمایش / مشاهده تمام مطالب مشاهده کنید.

اشیاء همیشه به رشته "شی" تبدیل می شوند. اگر می خواهید ارزش عضو شیء شیء (شی) را به منظور اشکال زدایی نمایش دهید، پاراگراف های زیر را بخوانید. اگر می خواهید نام کلاس شیء مورد نظر را بدست آورید، از get_class () استفاده کنید.

منابع همیشه به رشته ها با ساختار "منبع منبع # 1" تبدیل می شوند، جایی که 1 یک منبع منحصر به فرد منبع (منابع) اختصاص داده شده به آن در PHP در طول اجرای است. اگر می خواهید یک نوع منبع را دریافت کنید، استفاده کنید.

null همیشه به یک رشته خالی تبدیل می شود.

همانطور که می بینید بالا، خروجی آرایه ها، اشیاء یا منابع شما را با هر گونه اطلاعات مفید در مورد مقادیر خود ارائه نمی دهد. راه مناسب برای نمایش مقادیر برای اشکال زدایی، استفاده از توابع print_r () و var_dump () است.

شما همچنین می توانید مقادیر PHP را به رشته ها برای ذخیره سازی ثابت تبدیل کنید. این روش سریال سازی نامیده می شود و می تواند با استفاده از تابع سریال () انجام شود. علاوه بر این، اگر شما یک پشتیبانی WDDX در تنظیمات پی اچ پی خود دارید، می توانید مقادیر PHP را در ساختار XML سریال کنید.

تبدیل ردیف در اعداد

اگر رشته به عنوان یک مقدار عددی شناخته شده است، مقدار نتیجه و نوع تعریف شده به عنوان نشان داده شده در زیر تعریف شده است.

رشته به عنوان شناور شناخته می شود اگر آن را شامل هر شخصیت. "،" E "، یا" E ". در غیر این صورت، آن را به عنوان یک کل تعریف خواهد شد.

مقدار توسط بخش اولیه خط تعیین می شود. اگر رشته با مقدار عددی صحیح شروع می شود، این مقدار مورد استفاده قرار خواهد گرفت. در غیر این صورت، مقدار 0 (صفر) خواهد بود. مقدار عددی Faerful یک یا چند رقم (که می تواند شامل یک نقطه اعشار باشد)، به درخواست علامت ارائه شده، به دنبال یک شاخص اختیاری است. شاخص درجه "E" یا "E" با یک یا چند عدد بعدی است.

$ foo \u003d 1 + "10.5"؛ // $ foo شناور است (11.5) $ foo \u003d 1 + "-1.3e3"؛ // $ foo شناور است (-1299) $ foo \u003d 1 + "bob-1.3e3"؛ // $ foo یک عدد صحیح است (1) $ foo \u003d 1 + "bob3"؛ // $ foo یک عدد صحیح است (1) $ foo \u003d 1 + "10 خوک کوچک"؛ // $ foo INTEGER (11) $ foo \u003d 4 + "10.2 piggies کوچک"؛ // $ foo شناور است (14.2) $ foo \u003d "10.0 خوک" + 1؛ // $ foo شناور است (11) $ foo \u003d "10.0 خوک" + 1.0؛ // $ foo شناور است (11)

برای اطلاعات بیشتر در مورد این تبدیل، بخش مستند سازی UNIX Strtod (3) را ببینید.

اگر می خواهید هر یک از نمونه های این پارتیشن را آزمایش کنید، می توانید آن را کپی کنید و آن را کپی کنید و خط بعدی را ببینید تا ببینید چه اتفاقی می افتد:

echo "\\ $ foo \u003d\u003d $ foo؛ نوع:". Gettype ($ foo). "
\\ n "؛

انتظار نداشته باشید کد نماد را با تبدیل آن به یک عدد صحیح دریافت کنید (همانطور که می توانید انجام دهید، به عنوان مثال، در C). برای تبدیل کاراکترها به کدهای خود و پشت، از ORD () و

من یک متخصص در برنامه نویسی در پی اچ پی نیستم، اما من کمی به من اشتباه می کنم، چرا من بعضی از کد ها را در پی اچ پی دیدم با یک رشته که در تک و گاهی اوقات در نقل قول های دوگانه به پایان رسید.

من فقط می دانم که زبان V.NET یا C، اگر آن را در نقل قول های تک، به این معنی است که این یک نماد است، نه یک رشته.

تصمیم

چه چیزی میخواهید بدانید

$ a \u003d "name"؛ $ b \u003d "$ a"؛ \u003d\u003d "نام من" $ c \u003d "من $ a"؛ \u003d "نام من"

در پی اچ پی، افراد از نقل قول های تک برای تعیین یک رشته ثابت استفاده می کنند، مثلا "A"، "نام من"، "ABC XYZ" هنگام استفاده از نقل قول های دوگانه برای تعیین یک رشته حاوی شناسه، مانند "A $ b $ $ c $ D "،

و چیز دیگری،

اکو "نام من"؛

سریعتر از

اکو "نام من"؛

اکو "من" $ a؛

کندتر از

echo "$ a"؛

این برای ردیف های دیگر مورد استفاده قرار می گیرد.

در پی اچ پی، متن در نقل قول های تک به عنوان یک مقدار رشته در نظر گرفته می شود و متن در نقل قول های دوگانه متغیرها را با جایگزینی و پردازش ارزش آنها تجزیه و تحلیل می کند.

$ test \u003d "متغیر"؛ Echo "Hello Mr $ test"؛ // خروجی خواهد بود: سلام آقای متغیر echo "hello mr $ test"؛ // خروجی خواهد بود: Hello MR $ test

در اینجا، نقل قول دوگانه تجزیه و تحلیل ارزش را دارد، و نقل قول تک به عنوان یک مقدار رشته (بدون تجزیه یک متغیر آزمون $) در نظر گرفته می شود.

هر دو نوع شخصیت های توزیع شده ردیف هستند. یک نوع نقل قول مناسب برای استفاده از نوع دیگری از نقل قول است. "" "و همچنین" ""، بزرگترین تفاوت بین انواع نقل قول ها این است که ارجاعات به شناسه های توزیع شده در داخل نقل قول های دوگانه جایگزین می شوند و نه در داخل نقل قول ها.

اظهار نظر: در PHP 7.0.0 در سیستم عامل های 64 بیتی محدودیت های محدودی برای طول رشته وجود ندارد، در سیستم های 32 بیتی و در نسخه های پی اچ پی زودتر، خطوط نمی توانند بیش از 2 گیگابایت (2147483647 بایت) باشند.

نحو

رشته را می توان با چهار روش مختلف تعیین کرد:

  • نقل قول تک
  • نقل قول دوگانه
  • نحو NowDoc (با شروع از PHP 5.3.0)

نقل قول تک

ساده ترین راه برای شناسایی یک رشته این است که آن را به نقل قول های تک (نماد " " ).

برای استفاده از نقل قول های تک در داخل رشته، آن را با یک لایه معکوس نمره ( \ ) اگر شما نیاز به نوشتن یک جایگزین معکوس، آن را کپی کنید ( \\ ) تمام موارد دیگر استفاده از لایه معکوس به عنوان نمادهای متعارف تفسیر می شود: این به این معنی است که اگر سعی کنید از سایر توالی های کنترل استفاده کنید، مانند \\ ر یا \\ n.آنها به عنوان رفتار خاصی به دست می آیند.

اکو "این یک رشته ساده است";

اکو "شما همچنین می توانید به رشته ها وارد کنید
نماد خط جدید مانند این
این طبیعی است "
;

// نمایش ها: هنگامی که آرنولد گفت: "من برگشتم"
اکو "یک بار یک بار آرنولد گفت:" من برگشتم ";

اکو "شما حذف C: \\\\ *. *؟";

// نمایش ها: شما حذف C: \\ *. *؟
echo "شما حذف C: \\ *. *؟" ؛

// نمایش ها: این کار مستقر نخواهد شد: \\ n خط جدید
اکو "این مستقر نخواهد شد: \\ n رشته جدید";

// نمایش ها: متغیرهای $ expand نیز $ هر دو را باز نمی شود
اکو "$ expand متغیرها را نیز به فروش نمی رساند";
?>

نقل قول دوگانه

اگر رشته در نقل قول های دوگانه محصور شده باشد (")، پی اچ پی توالی های کنترل زیر از کاراکترهای خاص را تشخیص می دهد:

توالی های کنترل
توالی مقدار
\\ n. خط جدید (LF یا 0x0A (10) در ASCII)
\\ ر بازگشت حمل (CR یا 0x0D (13) در ASCII)
\\ t. برگه افقی (HT یا 0X09 (9) در ASCII)
\\ v. زبانه عمودی (VT یا 0x0b (11) در ASCII) (با PHP 5.2.5)
\\ E. علامت فرار (ESC یا 0x1b (27) در ASCII) (با PHP 5.4.4)
\\ f. خوراک صفحه (FF یا 0X0C (12) در ASCII) (با PHP 5.2.5)
\\ معکوس معکوس لعنتی
\$ علامت دلار
\" نقل قول دوگانه
\{1,3} دنباله ای از نمادها مربوط به بیان منظم نماد در سیستم شماره اکتال است که به آرامی تحت فشار قرار می گیرد به بایت (I.E. "\\ 400" \u003d\u003d\u003d "\\ 000")
\\ x (1،2) دنباله ای از شخصیت های مربوط به بیان منظم نماد در یک سیستم شماره هگزادسیمال
\\ u (+) دنباله ای از شخصیت های مربوط به بیان منظم نماد یونیکد، که در رشته در نمای UTF-8 نمایش داده می شود (اضافه شده به PHP 7.0.0)

همانطور که در یک رشته به صورت تک نقل قول به پایان رسید، غربالگری هر شخصیت نیز نماد غربالگری خود را نمایش می دهد. تا PHP 5.1.1، معکوس کردن \\ ($ var) چاپ نشده

heredoc

راه سوم برای تعریف رشته ها استفاده از Heredoc-Syntax است: <<< . پس از این اپراتور، شما باید شناسه، سپس ترجمه ردیف را مشخص کنید. پس از آن، رشته خود را می رود، و سپس همان شناسه ای که درج بسته می شود.

خط باید با یک شناسه بسته شدن، I.E. او باید در ستون خط اول ایستاده باشد. علاوه بر این، شناسه باید با همان قوانین نامگذاری به عنوان تمام برچسب های دیگر در PHP مطابقت داشته باشد: تنها شامل کاراکترهای عددی و علامت زیر را شامل می شود و نباید با اعداد شروع شود (زیر خطی مجاز است).

توجه

بسیار مهم است که توجه داشته باشید که ردیف با شناسه بسته بندی نباید شامل کاراکترهای دیگر باشد، به جز یک semicolon ( ; ) این به این معنی است که شناسه نباید با undent معرفی شود و این که هیچ شکاف یا زبانه زبانه ها قبل یا بعد از یک نقطه با کاما وجود ندارد. همچنین مهم است که درک کنیم که اولین شخصیت در مقابل شناسه بسته شدن باید یک نماد یک رشته جدید تعریف شده در سیستم عامل شما باشد. به عنوان مثال، در سیستم های یونیکس، از جمله MacOS، این \\ n.. پس از شناسه بسته شدن، یک خط جدید نیز باید بلافاصله شروع شود.

اگر این قانون شکسته شود و شناسه بسته شدن "خالص" نیست، اعتقاد بر این است که شناسه بسته شدن از دست رفته است و پی اچ پی ادامه خواهد یافت. اگر در این مورد شناسه بسته شدن صحیح پیدا نشد، باعث می شود خطای تجزیه با شماره رشته در انتهای اسکریپت ایجاد شود.

مثال # 1 مثال نحو نادرست

کلاس Foo (
عمومی $ bar \u003d<<بار.
EOT؛
// pencing قبل از شناسه بسته شدن غیر قابل قبول است
}
?>

مثال # 2 مثال از نحو صحیح

کلاس Foo (
عمومی $ bar \u003d<<بار.
EOT؛
}
?>

Heredoc نمی تواند مورد استفاده قرار گیرد برای راه اندازی زمین های کلاس. با شروع از PHP 5.3، این محدودیت تنها به Heredoc حاوی متغیرهای موجود در خود اعمال می شود.

Heredoc-Text رفتار مشابهی را به عنوان یک ردیف در نقل قول های دوگانه انجام می دهد، در حالی که آنها را ندارند. این به این معنی است که شما نیازی به سپاه پاسداران در Heredoc ندارید، اما هنوز می توانید از توالی های کنترل بالا استفاده کنید. متغیرها پردازش می شوند، اما استفاده از متغیرهای پیچیده درون Heredoc نیز باید توجه داشته باشید که هنگام کار با خطوط.

مثال # 3 مثال از تعریف اینجا ردیف

$ str \u003d.<<رشته نمونه
پوشش چندین خط
با استفاده از نحو Heredoc.
EOD؛

foo کلاس
{
var $ foo؛
var $ bar؛

تابع __construct ()
{
$ این -\u003e foo \u003d "foo"؛
$ این -\u003e
}
}

$ foo \u003d جدید foo ()؛
$ نام \u003d "name"؛

اکو<<نام من "$ نام" است. من $ foo را تایپ می کنم -\u003e foo .
حالا بیرون میروم
($ foo -\u003e bar [1]) .
این باید نامه نامه "A" را حذف کند: \\ x41
EOT؛
?>

نام من "نام" است. من Foo را چاپ می کنم در حال حاضر، من بار 2 را آواره کردم. این باید نامه نامه "A" را حذف کند: a

همچنین ممکن است از نحو Heredoc برای انتقال داده ها از طریق استدلال های تابع استفاده کنید:

با شروع از نسخه 5.3.0، ممکن بود متغیرهای استاتیک و خواص / ثابت های کلاس را با استفاده از نحو Heredoc ترکیب کنید:

مثال # 5 با استفاده از Heredoc برای بروز متغیر استاتیک

// متغیرهای استاتیک
تابع foo ()
{
استاتیک $ bar \u003d<<هیچ چیز اینجا نیست ...
برچسب؛
}

// ثابت ها / خواص کلاس
foo کلاس
{
Const Bar \u003d.<<یک مثال از استفاده ثابت
foobar؛

عمومی $ baz \u003d<<یک مثال از استفاده از زمینه
foobar؛
}
?>

با شروع از PHP 5.3.0، شما همچنین می توانید شناسه Heredoc را با دو نقل قول احاطه کنید:

nowdoc

NowDoc برای رشته های تک نقل قول یکسان است، زیرا WorkeDoc برای خطوط در نقل قول های دوگانه. NowDoc به نظر می رسد مانند Heredoc، اما در داخل آن هیچ جایگزینی انجام نشده است. این طراحی ایده آل برای معرفی یک کد پی اچ پی یا سایر بلوک های متن بزرگ بدون نیاز به محافظ آن است. در این، او کمی شبیه طراحی SGML است این واقعیت که بلوک متن را اعلام می کند که برای پردازش در نظر گرفته نشده است.

NowDoc همان دنباله را نشان می دهد <<< این در Heredoc مورد استفاده قرار می گیرد، اما شناسه پس از آن پس از آن، به عنوان مثال، تک نقل قول است <<<"EOT" . تمام شرایطی که برای شناسه های Heredoc فعالیت می کنند نیز برای NowDoc معتبر هستند، به ویژه کسانی که متعلق به شناسه بسته شدن هستند.

مثال # 7 نمونه ای از استفاده از NOWDOC

اکو<<<"EOD"
مثال متن
اشغال چندین خط
با استفاده از نحو NowDoc. همجنسگرا معکوس همیشه به معنای واقعی کلمه پردازش می شود
به عنوان مثال، \\\\ و \\ ".
EOD؛

نتیجه این مثال:

یک نمونه از یک متن که چندین خط را با استفاده از نحو NowDoc اشغال می کند. سکته های معکوس همیشه به معنای واقعی کلمه پردازش می شوند، به عنوان مثال، \\\\ و \\ ".

مثال # 8 رشته NowDoc به نقل از مثال با متغیرها

/ * یک مثال پیچیده تر با متغیرها. * /
foo کلاس
{
عمومی $ foo؛
عمومی $ نوار؛

تابع __construct ()
{
$ این -\u003e foo \u003d "foo"؛
$ این -\u003e bar \u003d آرایه ("bar1"، "bar2"، "bar3")؛
}
}

$ foo \u003d جدید foo ()؛
$ نام \u003d "name"؛

اکو<<<"EOT"
نام من "$ نام" است. من $ foo-\u003e foo را تایپ می کنم.
در حال حاضر من تایپ ($ foo-\u003e نوار).
این نباید عنوان را "A" برداشت: \\ x41
EOT؛
?>

نتیجه این مثال:

نام من "$ نام" است. من $ foo-\u003e foo را تایپ می کنم. در حال حاضر من تایپ ($ foo-\u003e نوار). این نباید عنوان را "A" برداشت: \\ x41

مثال # 9 مثال از استفاده از داده های استاتیک

کلاس Foo (
عمومی $ bar \u003d<<<"EOT"
بار.
EOT؛
}
?>

اظهار نظر:

پشتیبانی NowDoc به PHP 5.3.0 اضافه شده است.

پردازش متغیرها

اگر رشته در نقل قول های دوگانه مشخص شده باشد، یا با Heredoc، متغیرهای داخل آن پردازش می شوند.

دو نوع نحو وجود دارد: ساده و پیچیده. نحو ساده ساده تر و راحت است. این اجازه می دهد تا پردازش متغیر، مقدار آرایه ( آرایه.) یا خواص شی ( هدف - شی.) با حداقل تلاش.

نحو پیچیده را می توان بر روی براکت های فرفری در اطراف بیان تعیین کرد.

نحو ساده

اگر مترجم با علامت دلار ملاقات شود ( $ )، این کاراکترهای بسیاری را ضبط می کند، زیرا ممکن است نام صحیح متغیر را شکل دهد. اگر می خواهید به طور دقیق پایان نام را تعریف کنید، نام متغیر را در براکت های فرفری قرار دهید.

$ juice \u003d "اپل"؛

اکو "او برخی از آب های آب میوه را نوشید." . php_eol؛

// اشتباه "S" یک شخصیت وفادار برای نام متغیر است، اما متغیر نام $ آب را دارد.
اکو "او برخی از آب های ساخته شده از آب میوه را نوشیدند." ؛

// به درستی. به شدت ذکر شده پایان نام متغیر با استفاده از براکت:
اکو "او برخی از آبمیوه های ساخته شده از $ (آب) را نوشید." ؛
?>

نتیجه این مثال:

او برخی از آب سیب را نوشید. او برخی از آب های ساخته شده را نوشید. او برخی از آب های ساخته شده از سیب را نوشید.

یک عنصر آرایه را می توان به طور مشابه پردازش کرد ( آرایه.) یا اموال شی ( هدف - شی.) در شاخص های بسته بندی مربع آرایه ( ] ) پایان تعریف شاخص را نشان می دهد. برای خواص جسم، قوانین مشابه به عنوان متغیرهای ساده اعمال می شود.

مثال # 10 مثال ساده نحو ساده

تعریف ("Koolaid"، "Koolaid1")؛
$ juices \u003d آرایه ("اپل"، "نارنجی"، "koolaid1" \u003d\u003e "بنفش")؛

اکو "او برخی از jices $ [0] را نوشید." . php_eol؛
اکو "او برخی از jiices $ [1] را نوشید." . php_eol؛
اکو "او برخی از آب میوه ها را نوشیدند [Koolaid1] آب." . php_eol؛

افراد کلاس (
عموم مردم جان \u003d "جان اسمیت"؛
عمومی $ جین \u003d "جین اسمیت"؛
Public $ robert \u003d "رابرت پاولز"؛

عمومی $ اسمیت \u003d "اسمیت"؛
}

$ افراد \u003d افراد جدید ()؛

echo "$ افراد -\u003e جان برخی از jices $ [0] آب را نوشیدند." . php_eol؛
eCHO "$ افراد -\u003e جان پس از آن گفت: سلام به مردم -\u003e جین." . php_eol؛
echo "$ افراد -\u003e John Weass به $ افراد -\u003e رابرت خوش آمدید." php_eol؛
echo "$ افراد -\u003e رابرت این دو نفر را به $ $ -\u003e اسمیت تبریک می گوید." ؛ // کار نمیکند
?>

نتیجه این مثال:

او برخی از آب سیب را نوشید. او برخی از آب پرتقال را نوشید. او برخی از آب های بنفش را نوشید. جان اسمیت برخی از آب سیب را نوشید. جان اسمیت سپس به جین اسمیت سلام کرد. همسر جان اسمیت رابرت پاولز را خوشحال کرد. رابرت پاولزن این دو را پذیرفت.

پی اچ پی 7.1.0 اضافه شده پشتیبانی منفی شاخص های عددی

مثال # 11 شاخص های منفی منفی

$ string \u003d "string"؛
اکو "نماد با شاخص -2 برابر است$ string [- 2]. "، php_eol؛
$ رشته [- 3] \u003d "O"؛
اکو "تغییر نماد در موقعیت -3 در" O "به رشته زیر می دهد:$ string. "، php_eol؛
?>

نتیجه این مثال:

نماد با شاخص -2 n است. تغییر نماد در موقعیت -3 در "O" به خط زیر می دهد: قوی

برای چیزی پیچیده تر، از نحو پیچیده استفاده کنید.

نحو پیچیده (شکل)

این سخت است زیرا در درک دشوار است، اما به این دلیل که به شما اجازه می دهد از عبارات پیچیده استفاده کنید.

هر متغیر اسکالر، یک عنصر آرایه یا یک ویژگی شیء نمایش داده شده در یک رشته می تواند در خط توسط این نحو ارائه شود. فقط بیان و همچنین خارج از خط را بنویسید و سپس آن را وارد کنید { و } . تا آنجا که { نمی توان محافظت کرد، این نحو تنها زمانی به رسمیت شناخته خواهد شد $ باید مستقیما باشد { . استفاده کنید {\$ چاپ کردن {$ . چند مثال توضیحی:

// تمام خطاها را نشان می دهد
eRROR_RERPORTING (E_ALL)؛

$ بزرگ \u003d "بزرگ"؛

// کار نمی کند، نمایش می دهد: آن (عالی)
echo "این ($ بزرگ)"؛

// کار می کند، نمایش می دهد: عالی است
echo "این ($ بزرگ)"؛

// آثار
اکو "این مربع عرض($ مربع -\u003e عرض) 00 سانتیمتر. "؛

// آثار، کلیدهای محصور شده در نقل قول ها، تنها با نحو شکل براکت کار می کنند
echo "این کار می کند: ($ ARR [" کلید "])"؛

// آثار
echo "این کار می کند: ($ ARR [4] [3])"؛

// به همین دلیل به عنوان $ foo خارج از آن نادرست است
// خطوط به عبارت دیگر، هنوز هم کار خواهد کرد
//، اما از آنجا که پی اچ پی برای اولین بار به دنبال یک فوم ثابت است، باعث خواهد شد
// سطح خطا E_Notice (ثابت نامحدود).
اکو "درست نیست:($ ARR [foo] [3]) "؛

// آثار. هنگام استفاده از آرایه های چند بعدی در داخل
// خطوط همیشه از براکت های فرفری استفاده می کنند
echo "این کار می کند: ($ ARR [" foo "] [3])"؛

// آثار.
اکو "این کار می کند:". $ ARR ["foo"] [3]؛

اکو "همچنین کار می کند:($ obj -\u003e ارزش [3] -\u003e نام) "؛

اکو "این مقدار یک متغیر به نام است$ نام: ($ ($ نام)) "؛

اکو "این مقدار متغیر با نام است که تابع GetName () را باز می کند:($ (getname ())) "؛

اکو "این مقدار متغیر با نام است که بازده \\ $ object-\u003e getName ():($ ($ object -\u003e getname ()) "؛

// کار نمی کند، صفحه نمایش: این چیزی است که بازگشت GetName (): (GetName ())
اکو "این چیزی است که بازگشت GetName (): (GetName ())";
?>

با استفاده از این نحو، همچنین امکان دسترسی به خواص جسم داخل خطوط وجود دارد.

کلاس Foo (
var $ bar \u003d "من هستم". ؛
}

$ foo \u003d جدید foo ()؛
$ bar \u003d "bar"؛
$ baz \u003d آرایه ("foo"، "bar"، "baz"، "quux")؛
echo "($ foo -\u003e $ bar) \\ n"؛
echo "($ foo -\u003e ($ baz [1])) \\ n"؛
?>

نتیجه این مثال:

من نوار هستم من نوار هستم

اظهار نظر:

توابع، تماس با روش، متغیرهای کلاس استاتیک، و همچنین کلاس های ثابت در داخل {$} با شروع از نسخه PHP 5. با این حال، مقدار مشخص شده به عنوان نام متغیر در همان زمینه پردازش می شود به عنوان رشته ای که در آن تعیین می شود. با استفاده از پرانتز های مجزا ( {} ) این کار برای دسترسی به مقادیر توابع، روش ها، ثابت های کلاس یا متغیرهای استاتیک کار نخواهد کرد.

// تمام خطاها را نشان می دهد
eRROR_RERPORTING (E_ALL)؛

آبجو کلاس (
Const SoftDrink \u003d "Rootbeer"؛
عمومی استاتیک $ ale \u003d "IPA"؛
}

$ rootbeer \u003d "a & w"؛
$ IPA \u003d "الکساندر کیت" "؛

// این کار می کند، نمایش می دهد: من می خواهم A & W
اکو "من می خواهم ($ (آبجو :: SoftDrink)) \\ n"؛

// همچنین کار می کند، نمایش می دهد: من الکساندر کیت را دوست دارم
اکو "من می خواهم $ (آبجو :: $ ale)) \\ n"؛
?>

دسترسی به نماد در رشته و تغییر آن

نمادها در خطوط می توانند با تعریف افست آنها نسبت به ابتدای رشته، از ابتدا، در براکت های مربعی پس از یک رشته، به عنوان مثال، $ STR استفاده شوند، استفاده می شود. برای این منظور به عنوان یک آرایه از شخصیت ها فکر کنید. اگر شما نیاز به دریافت یا جایگزینی بیش از 1 نماد دارید، می توانید از توابع استفاده کنید substr () و substr_replace ().

اظهار نظر: با شروع از PHP 7.1.0، مقادیر جابجایی منفی پشتیبانی می شود. آنها از انتهای خط جبران می کنند. قبلا، افست منفی باعث خطا در سطح شد e_notice هنگام خواندن (بازگشت یک رشته خالی) یا e_warning هنگام ضبط (ترک رشته بدون تغییر).

اظهار نظر: نماد در ردیف همچنین می تواند با براکت های فرفری، به عنوان مثال، $ str (42) درمان شود.

توجه

تلاش برای نوشتن به جبران بیش از مرزهای رشته، رشته را با فضاهای قبل از این افست مکمل می کند. انواع نئوم به کل تبدیل می شوند. نوع جابجایی نامعتبر باعث خطای سطح می شود e_warning. فقط اولین نماد ردیف استفاده می شود. شروع با PHP 7.1.0، تخصیص یک رشته خالی یک خطای کشنده را ایجاد می کند. در این مورد، صفر بایت (صفر) اختصاص داده شد.

توجه

ردیف ها در پی اچ پی داخلی نشان دهنده آرایه بایت هستند. در نتیجه، دسترسی یا تغییر در رشته جابجایی از لحاظ رمزگذاری Multibyte ناامن است و باید تنها با رشته ها در کدگذاری های تک بایت، مانند مثال، ISO-8859-1 انجام شود.

اظهار نظر: با شروع از PHP 7.1.0، استفاده از یک شاخص خالی باعث ایجاد یک خطای کشنده می شود، زودتر در این مورد، رشته به یک آرایه بدون هشدار تبدیل شد.

مثال # 12 نمونه های ردیف چندگانه

// نماد رشته اول کاراکتر را دریافت کنید
$ str \u003d "این یک آزمون است." ؛
$ first \u003d $ str [0]؛

// نماد رشته سوم را دریافت کنید
$ سوم \u003d $ str [2]؛

// آخرین نماد رشته شخصیت را دریافت کنید
$ str \u003d "این هنوز یک آزمون است." ؛
$ last \u003d $ strlen ($ st) - 1]؛

// تغییر آخرین نماد رشته رشته
$ str \u003d "نگاه کردن به دریا"؛
$ strlen ($ str) - 1] \u003d "e"؛

?>

با شروع از PHP 5.4، افست در رشته باید یک عدد صحیح یا یک رشته حاوی اعداد را تنظیم کنید، در غیر این صورت هشدار صادر می شود. قبلا افست، ردیف مشخص شده نوع "فو"، بدون هشدارها، به آن تبدیل شد 0 .

مثال # 13 تفاوت بین PHP 5.3 و PHP 5.4

$ str \u003d "abc"؛

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) "B" Boool (True) String (1) "B" Boool (True) String (1) "یک" Bool (True) String (1) "B" Bool (TRUE)

نتیجه این مثال در PHP 5.4:

string (1) "B" BOOL (TRUE) هشدار: دستور غیر قانونی Offset "1.0" در /tmp/t.php در خط 7 رشته (1) "B" BOOL (FALSE) هشدار: دستور غیر قانونی افست "X" در / tmp / t.php در خط 9 رشته (1) "string" bool (false) (1) "b" bool (false)

اظهار نظر:

تلاش برای دسترسی به متغیرهای دیگر (به استثنای آرایه ها یا اشیاء که رابط های خاصی را اجرا می کنند) با یا {} سکوت بازگشت خالی.

اظهار نظر:

پی اچ پی 5.5 پشتیبانی از دسترسی به نمادها در رشته های رشته ای با استفاده از نحو یا {} .

برای اصلاح رشته ها، بسیاری از ویژگی های مفید وجود دارد.

توابع اصلی در بخش توابع رشته و برای جستجوی گسترده و جایگزینی - توابع عبارات منظم سازگار با Perl توصیف شده است.

تبدیل به رشته

ارزش را می توان به یک رشته تبدیل کرد (رشته)یا توابع strval (). در بیان هایی که رشته ضروری است، تبدیل به طور خودکار رخ می دهد. این اتفاق می افتد زمانی که شما از توابع استفاده می کنید. اکو یا چاپ.یا هنگامی که مقدار متغیر با رشته مقایسه می شود. خواندن بخش های انواع و دستکاری انواع موارد زیر را درک می کند. همچنین ببینید settype ().

آرایه ها همیشه به یک رشته تبدیل می شوند "آرایه"بنابراین شما نمی توانید محتویات آرایه را نمایش دهید ( آرایه.) استفاده كردن اکو یا چاپ.برای پیدا کردن آنچه که آن را شامل می شود. برای مشاهده یک مورد جداگانه، از چیزی شبیه استفاده کنید echo $ Arr ["foo"]. نکات زیر را در مورد نحوه نمایش / مشاهده تمام مطالب مشاهده کنید.

برای تبدیل نوع متغیر "هدف - شی" در نوع رشته استفاده از روش سحر و جادو __toString.

مقدار خالی همیشه به یک رشته خالی تبدیل شده است.

همانطور که می بینید بالا، تبدیل مستقیم به رشته آرایه ها، اشیاء یا منابع اطلاعاتی مفید در مورد خود را به جز انواع خود را ارائه نمی دهد. یک راه مناسب برای خروجی مقادیر برای اشکال زدایی - استفاده از توابع print_r () و var_dump ().

اکثر مقادیر در پی اچ پی را می توان به یک رشته برای ذخیره سازی ثابت تبدیل کرد. این روش سریال سازی نامیده می شود و می تواند با استفاده از یک تابع انجام شود. serialize ().

تبدیل ردیف در اعداد

اگر رشته به عنوان یک مقدار عددی شناخته شده است، مقدار نتیجه و نوع تعریف شده به عنوان نشان داده شده در زیر تعریف شده است.

اگر رشته شامل هیچ یک از شخصیت ها نیست "."، "e"، یا "e"، و مقدار شماره در محدوده اعداد صحیح قرار می گیرد (تعریف شده است php_int_max) رشته به عنوان یک عدد صحیح شناخته می شود ( عدد صحیح) در تمام موارد دیگر، یک شماره نقطه شناور محسوب می شود ( شناور.).

مقدار توسط بخش اولیه خط تعیین می شود. اگر رشته با مقدار عددی صحیح شروع می شود، این مقدار مورد استفاده قرار می گیرد. در غیر این صورت، مقدار 0 (صفر) خواهد بود. مقدار عددی سمت راست یک یا چند رقم (که می تواند شامل یک نقطه اعشار باشد)، به درخواست علامت ارائه شده با شاخص اختیاری بعدی. شاخص درجه "E" یا "E" با یک یا چند عدد بعدی است.

$ foo \u003d 1 + "10.5"؛ // $ foo شناور است (11.5)
$ foo \u003d 1 + "-1.3e3"؛ // $ foo شناور است (-1299)
$ foo \u003d 1 + "bob-1.3e3"؛ // $ foo integer است (1)
$ foo \u003d 1 + "bob3"؛ // $ foo integer است (1)
$ foo \u003d 1 + "10 خوک کوچک"؛ // $ foo integer است (11)
$ foo \u003d 4 + "10.2 piggies کوچک"؛ // $ foo شناور است (14.2)
$ foo \u003d "10.0 خوک" + 1؛ // $ foo شناور است (11)
$ foo \u003d "10.0 خوک" + 1.0؛ // $ foo شناور است (11)
?>

برای اطلاعات بیشتر در مورد این تبدیل، بخش مستند سازی UNIX Strtod (3) را ببینید.

اگر می خواهید هر یک از نمونه های این بخش را آزمایش کنید، آن را کپی کنید و آن را کپی کنید و خط بعدی را ببینید تا ببینید چه اتفاقی می افتد:

echo "\\ $ foo \u003d\u003d $ foo؛ نوع:". Gettype ($ foo). "
\\ n "؛
?>

انتظار نداشته باشید کد نماد را با تبدیل آن به یک عدد صحیح دریافت کنید (به عنوان مثال، به عنوان مثال، در C). برای تبدیل کاراکترها به کدهای ASCII خود و استفاده از توابع بازگشت oRD () و chr ().

جزئیات اجرای یک نوع رشته

7 سال پیش.

مستندات ذکر نشده است، اما یک نقطه ضعف بسته شدن در انتهای Heredoc در واقع به عنوان یک سمینار واقعی تفسیر شده است، و به همین ترتیب، گاهی اوقات منجر به خطاهای نحو می شود.

$ foo \u003d.<<آ ب پ ت.
پایان؛
?>

این نیست:

foo (<<آ ب پ ت.
پایان؛
);
// خطای نحو، غیر منتظره "؛"
?>

بدون semicolon، آن را به خوبی کار می کند:

foo (<<آ ب پ ت.
پایان.
);
?>

3 سال پیش.

شما می توانید از رشته ای مانند آرایه ای از کاراکتر استفاده کنید (مانند C)

$ a \u003d "تست آرایه رشته"؛

var_dump ($ a)؛
// بازگشت رشته (17) "تست آرایه رشته"

var_dump ($ a)؛
// رشته بازگشت (1) "S"

// - با آرایه بازی -
var_dump ((آرایه) $ a)؛
// آرایه بازگشت (1) (\u003d رشته (17) "تست آرایه رشته")

var_dump ((آرایه) $ a)؛
// رشته بازگشت (17) "S"

norihiori

15 سال پیش.

شما می توانید نحو پیچیده را برای قرار دادن ارزش هر دو خواص شیء و روش های شیء داخل یک رشته استفاده کنید. مثلا ...
تست کلاس (
عمومی $ one \u003d 1؛
عملکرد عمومی دو () (
بازگشت 2؛
}
}
$ test \u003d تست جدید ()؛
echo "Foo ($ test -\u003e One) نوار ($ test -\u003e دو ())"؛
?>
خروجی "foo 1 bar 2" را تولید خواهد کرد.

با این حال، شما نمی توانید این کار را برای تمام مقادیر در فضای نام خود انجام دهید. ثابت های کلاس و خواص استاتیک / روش ها کار نمی کنند، زیرا نحو پیچیده به نظر می رسد "$".
تست کلاس (
const \u003d 1؛
}
echo "Foo (Test :: One) نوار"؛
?>
این خروجی "Foo (Test :: One) Bar است." ثابت ها و خواص استاتیک نیاز به شکستن رشته دارند.

3 سال پیش.

مراقب باشید که سازگار با "تبدیل رشته به اعداد":

اگر ("123ABC" \u003d\u003d 123) اکو "(intstr \u003d\u003d int) اشتباهات نادرست به عنوان درست است.";

// از آنجا که یک طرف یک عدد است، رشته به اشتباه از Intstr به INT تبدیل شده است، که پس از آن با شماره آزمون مطابقت دارد.

// درست برای همه شرایط شرطی مانند IF و حالت سوئیچ (احتمالا همچنین در حالی که حلقه ها)!

// این می تواند یک خطر امنیتی بزرگ در هنگام تست / استفاده از / صرفه جویی در ورودی کاربر، در حالی که از بین رفته و تست فقط یک عدد صحیح است.

// این SEMS تنها رفع 123 است که یک رشته به عنوان "123" است بنابراین هیچ تبدیل اتفاق نمی افتد.

?>

6 سال پیش.

Zeroes پیشرو در رشته ها (حداقل تعجب) به عنوان اکتال درمان نمی شود.
در نظر گرفتن:
$ x \u003d "0123" + 0؛
$ y \u003d 0123 + 0؛
echo "x $ x، y $ y است"؛ // چاپ "X 123، Y است 83"
به عبارت دیگر:
* صفر پیشرو در ادبیات عددی در کد منبع به عنوان "اکتال"، C.F. strtol ().
* پیشگام صفر در رشته ها (به عنوان مثال داده های ارسال شده توسط کاربر)، زمانی که بازیابی (به طور ضمنی یا صریح) به عدد صحیح نادیده گرفته می شود، و به عنوان دهدهی، C.F در نظر گرفته می شود. strtod ().

10 سال پیش.

در اینجا یک هک آسان برای اجازه دادن به رشته های دوگانه و Heredocs برای حاوی عبارات دلخواه در نحو پرفروش، از جمله ثابت و سایر تماس های عملکرد است:

// اعلامیه هک
تابع _expr ($ v) (بازگشت $ v؛)
$ _expr \u003d "_expr"؛

// زمین بازی ما.
تعریف ("QWE" , "ASD");
تعريف كردن("ZXC", 5 );

$ A.= 3 ;
$ B.= 4 ;

تابع. c.($ A., $ B.) (برگشت.$ A.+ $ B.; }

// استفاده
اکو"پیش{ $ _expr.(1 + 2 )} پست \\ n "; // خروجی "Pre 3 Post"
اکو"پیش{ $ _expr.(qWE)} پست \\ n "; // خروجی "Presd Post"
اکو"پیش{ $ _expr.(c.($ A., $ B.)+ zxc* 2 )} پست \\ n "; // خروجی "پیش 17 پست"

// Syntax عمومی ($ _expr (...))
?>

2 سال پیش.

من هر چند که این امر مفید خواهد بود برای اضافه کردن این نظر، به طوری که اطلاعات حداقل در صفحه سمت راست در سایت PHP ظاهر می شود.

توجه داشته باشید که اگر قصد دارید از یک رشته دوگانه با یک کلید وابسته استفاده کنید، ممکن است به خطای t_encapsed_and_whiteespace مراجعه کنید. برخی این را به عنوان یکی از پیام های خطای کمتر آشکار می دانند.

بیان مانند:

$ میوه\u003d آرایه (
"آ"=> "سیب",
"ب"=> "موز",
// و غیره.
);

چاپ "این یک است$ میوه[ "آ"] "; // t_encapsed_and_whitespace.
?>

قطعا به قطعات می افتد

شما می توانید آن را به صورت زیر حل کنید:

چاپ."این یک است$ میوه[ آ.] " ; // کلید را رد کنید
چاپ."این یک است${ میوه.[ "آ"]} " ; // نحو پیچیده
چاپ."این یک است{ $ میوه[ "آ"]} " ; // تنوع نحو پیچیده
?>

من ترجیح شخصی برای آخرین تنوع دارم، زیرا طبیعی تر و نزدیک تر به آنچه بیان می شود، مانند خارج از رشته است.

روشن نیست (به من، حداقل) چرا PHP missinterprets تک نقل قول در داخل بیان است، اما من تصور می کنم که آن را به داشتن چیزی است که با این واقعیت وجود دارد بخشی از رشته ارزش نیست - هنگامی که رشته در حال حاضر تجزیه شده نقل قول ها را تجزیه می کند در راه ...؟

2 سال پیش.

هر دو باید کار کنند :(

کلاسآزمایش کردن{
استاتیک عمومی
$ var= "استاتیک";
عمومی const var \u003d
"ادامه";

عملکرد عمومی sayhellostatic() {
اکو
"سلام:{ $ این:: $ var} " ;
}

عملکرد عمومی sayhelloconst() {
اکو
"سلام:{ $ این:: var)" ; // تجزیه خطا: خطای نحو، غیر منتظره ")"، انتظار "["
}
}

$ obj\u003d جدیدآزمایش کردن();
$ obj-> sayhellostatic();
$ obj-> sayhelloconst();

3 سال پیش.

چیزی که من تجربه کردم که بدون شک به کسی کمک خواهد کرد. . .
در ویرایشگر من، این نحو HTML را برجسته می کند و نظر $:

$ html \u003d.<<<"EOD"
$ comment
EOD؛

با استفاده از این نشان می دهد همه همان رنگ:

$ html \u003d.<<$ comment
EOD؛

ساختن آن بسیار ساده تر برای کار با

11 سال پیش.

برای صرفه جویی در ذهن شما Don "T خواندن نظرات قبلی در مورد تاریخ؛)

هنگامی که رشته های ربات را می توان به عددی تبدیل کرد (در ("$ a"\u003e "$ b") تست) سپس عددی حاصل شده استفاده می شود، دیگر رشته های کامل کاراکتر را مقایسه می کنند:

var_dump("1.22" > "01.23" ); // bool (false)
var_dump("1.22.00" > "01.23.00" ); // bool (درست)
var_dump("1-22-00" > "01-23-00" ); // bool (درست)
var_dump((شناور)"1.22.00" \u003e (شناور)"01.23.00" ); // bool (false)
?>

ردیف ها در پی اچ پی با نقل قول های تک یا دوگانه طراحی شده اند. تفاوت اصلی این است که در نقل قول های دوگانه می تواند با یک متغیر جایگزین شود:

حالا ما می توانیم راه حل دیگری برای کار متغیرهای درس در PHP ارائه دهیم:

$ title"؛ اکو"

$ محتوا
"; ?>

PHP چگونه یک متغیر را در رشته پیدا می کند؟

همه چیز ساده است به یاد داشته باشید چه شخصیت ها را می توان به نام متغیر استفاده کرد؟ اینها اعداد، حروف و تأکید بر _ هستند.

در اینجا پی اچ پی است و برای نام همه چیز بین نماد $ و اولین نماد ممنوعه پذیرفته می شود.

در کد پی اچ پی زیر، آن را به اشتباه نام متغیر را تعیین می کند و یک خطا را ارائه می دهد:

نتیجه مرورگر:

توجه: متغیر نامشخص: قیمت در D: \\ OpenServer \\ دامنه \\ Site \\ index.php در خط 3

به PHP به درستی نام متغیر را در رشته تعیین کرده اید، شما باید آن را در براکت های فرفری قرار دهید ():

نتیجه مرورگر:

1499RUB

هیچ نظری یکپارچه وجود ندارد، چه نقل قول باید برای خطوط عادی مورد استفاده قرار گیرد که در آن هیچ چیز نباید جایگزین شود. با این حال، بسیاری از برنامه نویسان ترجیح می دهند از نقل قول های تک استفاده کنند.

واقعیت این است که نقل قول های دوگانه از بسیاری باعث می شود که انجمن "به این خط باید چیزی را جایگزین کند". بنابراین، من توصیه می کنم با استفاده از نقل قول های تک متن معمولی، و تنها زمانی که شما نیاز به جایگزینی متغیر در متن. مثال:

سپاه پاسداران

اگر شما نیاز به نقل قول داخل رشته دارید، 2 راه برای انجام این کار وجود دارد:

در مثال دوم، لایه معکوس پس از آن، نقل قول ها را بعد از آن می گذارد تا پی اچ پی آن را به عنوان یک رشته درک کند.

فکر میکنید چه کاری باید انجام دهید تا فقط برش معکوس را نمایش دهید؟ پس از همه، آن را نقل قول بسته بندی سپر. این خنده دار است، اما شما باید یک اسلش دوم را برای محافظت از اول بنویسید:

جدول بندی و انتقال رشته در نقل قول های دوگانه

لایه معکوس در نقل قول های دوگانه اجازه می دهد تا شما را به سپر نه تنها نقل قول ها و خودتان، بلکه برخی از شخصیت های دیگر. محبوب ترین آنها یک برگه (فضای طولانی است که شما دریافت می کنید زمانی که شما فشار را فشار دهید) و انتقال رشته. آنها به نظر می رسند:

یک اسکریپت بنویسید که:
1. یک متغیر نوع $ را با یک مقدار بازی ایجاد می کند.
2. یک متغیر $ نام را با ارزش "World of Warcraft" (با نقل قول ها) ایجاد می کند.
3. هر دو متغیر را در داخل برچسب نمایش می دهد

. باید بین متغیرها فاصله داشته باشد.

چه نوع نقل قول ها برای طراحی رشته ها - آپوستروف و یا نقل قول های کلاسیک کلاسیک استفاده می شود؟

بیایید تفاوت بین دو و تک نقل قول ها را در پی اچ پی و نمونه ها تجزیه و تحلیل کنیم، زمانی که شما نیاز به استفاده دارید، پیدا کنید.

متغیرها و توالی های محافظ برای شخصیت های خاص که در خطوط محصور شده در نقل قول های تک قرار گرفته اند پردازش نمی شوند. خطوطی که توسط Apostrophes طراحی شده توسط مترجم پی اچ پی پردازش می شوند بسیار سریعتر از خطوط مشابه که توسط نقل قول های دوگانه احاطه شده اند.

دلیل این است که ساده است: خطوط در نقل قول دوگانه مترجم PHP علاوه بر بررسی برای متغیرها و اگر این ها واقع شده اند، سپس به جای نام متغیر در رشته، مقدار آن را وارد کنید. اما رشته ای که در Apostrophes به پایان رسید، توسط مترجم به عنوان متن معمولی درک می شود و هیچ تغییری در این خطوط پی اچ پی انجام نمی شود. من فکر می کنم واضح است که پردازش خطوط در نقل قول های تک در هر مورد سریعتر رخ می دهد.

برای شروع، ما توضیح می دهیم که چگونه رشته را تعیین کنیم، و سپس بررسی کنید که چگونه سریعتر ردیف ها در نقل قول های تک رخ می دهد.

ساده ترین راه برای تعیین رشته این است که آن را به نقل قول های تک (") به دست آورید. برای استفاده از نقل قول های تک در داخل رشته محصور شده در نقل قول های تک، آنها باید از نماد معکوس معکوس (\\) پیش از آن محافظت شوند. اگر سینک معکوس باید قبل از یک نقل قول یا در انتهای خط برود، شما باید آن را تکرار کنید. اگر سعی کنید هر شخصیت دیگری را محافظت کنید، ویژگی غرق شدن معکوس نیز چاپ خواهد شد.

ما نمونه ای از استفاده از نقل قول های تک را ارائه می دهیم:
// حذف: رشته ساده
echo "ردیف ساده"؛
// حذف: من اینجا هستم
اکو "من" اینجا "؛
// بیرون می آید: آن را وارد نمی کند: \\ n رشته جدید
echo "آن را وارد نمی کند: \\ n رشته جدید؛
// خواهد شد: متغیر $ نمونه نیز جایگزین نیست
eCHO "$ متغیر مثال جایگزین آن نیست"؛ اگر رشته در نقل قول های دوگانه محصور شده باشد (")، پی اچ پی توالی های کنترل بیشتری را برای کاراکترهای خاص شناسایی می کند و همچنین جایگزین نام متغیر در رشته مقدار آن می شود. درست همانطور که با نقل قول های تک، به منظور استفاده از نقل قول های دوگانه در داخل یک رشته نتیجه گیری شد. در نقل قول دوگانه، آنها باید با نماد نوار معکوس (\\) پیش رو باشند.

بگذارید نمونه ای از استفاده از نقل قول های دوگانه ارائه دهیم:
// حذف: رشته ساده
echo "ردیف ساده"؛
// بیرون می رود: شرکت "Snowdrop" "
echo "شرکت \\" snowdrophry \\ ""؛
// آیا خارج می شود: این به یک رشته جدید تبدیل خواهد شد
echo "این به خط جدید \\ n ترجمه خواهد شد؛
// خواهد شد: متغیر جایگزین خواهد شد
$ example \u003d "جایگزینی"؛
echo "متغیر $ مثال"؛ همچنین باید به یاد داشته باشید که دنباله "\\ n" (خط جدید)، "\\ r" (حمل و نقل بازگشت) برای متن معمولی، و نه برای HTML. بنابراین در مرورگر شما تغییرات را نمی بینید (فقط در صفحه منبع صفحه).

بیایید پیدا کنیم که سریعتر از نقل قول های تک دو برابر شود. برای اندازه گیری، یک اسکریپت تست کوتاه بنویسید و بلافاصله توجه کنید که اگر شما آن را آزمایش کنید، نتایج که به سخت افزار کامپیوتر یا سرور شما بستگی دارد متفاوت خواهد بود.
// بازگشت زمان مهر در ابتدای چرخه
$ START \u003d MICROTIME (TRUE)؛
// یک چرخه چرخه را برای 1 میلیون تکرار ایجاد کنید
برای ($ I \u003d 0؛ $ I< 1000000; $i++) {
$ text \u003d "در اینجا یک رشته نماد است"؛
}
// محاسبه زمان صرف شده
$ time \u003d (microtime (true) - $ شروع)؛ نتیجه: 0.09 ثانیه.

اگر ما جایگزین نقل قول ها را در دو برابر کنیم:
$ text \u003d "در اینجا یک رشته نماد است"؛ نتیجه برابر 0.10 ثانیه خواهد بود.

همانطور که می بینیم، هنگام استفاده از خطوط متن، تفاوت در زمان اعدام بسیار کوچک است، حتی می تواند گفته شود و در همه وجود ندارد. جالب ترین شروع خواهد شد زمانی که ما سعی می کنیم رشته و متغیر را ترکیب کنیم.
$ text \u003d "در اینجا نماد خط $ من"؛ یا
$ text \u003d $ i. "در اینجا یک رشته نمادین است"؛ نتیجه تقریبا: 0.27 ثانیه است.

تفاوت بسیار حساس است. Concatenation و نقل قول های دوگانه به وضوح بر سرعت تاثیر می گذارد، اگر متغیرها به رشته اضافه شوند.

هنگامی که سرور کد را پردازش می کند، تمام مطالب نقل قول های دوگانه برای متغیرها، ثابت ها و دیگر را بررسی می کند. طول می کشد. و این واقعیت که بین تک نقل قول های سرور به عنوان متن به پایان رسید و آن را مهم نیست آنچه در آنجا قرار دارد. تفاوت بین سرعت تک و دو نقل قول بسیار ناچیز است، اما اگر شما یک پروژه بسیار بارگیری شده را توسعه دهید، تا حدودی ذخیره می شود میلی ثانیه در حال حاضر یک پیروزی است.