PHP дээрх давхар ба ганц хашилтын ялгаа. PHP дахь ганц ба давхар хашилттай мөрүүдийн ялгаа юу вэ? Php давхар хашилтыг хашилтанд оруулав

Гэр / Төхөөрөмж суурилуулах

Сэтгэгдэл: 64 битийн платформ дээрх PHP 7.0.0-д 32 битийн системд шугамын уртад хүрч болох хязгаарлалт байхгүй бөгөөд PHP-ийн өмнөх хувилбаруудад мөр нь 2 ГБ (2147483647 байт)-аас их байж болохгүй.

Синтакс

Мөрийг дөрөвөөр тодорхойлж болно янз бүрийн аргаар:

  • ганц ишлэл
  • давхар хашилт
  • nowdoc синтакс (PHP 5.3.0-аас хойш)

Ганц ишлэл

Хамгийн энгийн аргатэмдэгт мөрийг тодорхойлох нь дан хашилтанд (тэмдэгт " ).

Мөр дотор ганц ишлэл ашиглахын тулд урвуу зураасаар зайлуулна уу ( \ ). Хэрэв та урвуу зураасыг өөрөө бичих шаардлагатай бол давхардуулаарай ( \\ ). Буцах зураасны бусад бүх хэрэглээг ердийн тэмдэгт гэж тайлбарлах болно: энэ нь хэрэв та бусад зугтах дарааллыг ашиглахыг оролдвол гэсэн үг юм. \rэсвэл \n, тэдгээр нь ямар нэгэн онцгой зан үйлийн оронд байгаа байдлаар гарна.

цуурай "энэ бол энгийн мөр";

цуурай "Та мөн мөрөнд оруулж болно
ийм шинэ мөрийн тэмдэгт,
Энэ зүгээр"
;

// Гаралт: Арнольд нэг удаа: "Би буцаж ирнэ" гэж хэлсэн.
цуурай "Нэг өдөр Арнольд "Би эргэж ирнэ" гэж хэлсэн.;

Цуурай "Чи C:\\*.*-г устгасан уу?";

// Гаралт: Та C:\*.*-г устгасан уу?
echo "Чи C:\*.*-г устгасан уу?" ;

// Гаралт: Үүнийг өргөтгөхгүй: \n шинэ мөр
цуурай "Үүнийг өргөтгөхгүй: \n шинэ мөр";

// Гаралтууд: $expand болон $expand хувьсагчуудыг өргөтгөхгүй
цуурай "$expand ба $хувьсагчуудын аль нь ч нээгдээгүй байна";
?>

Давхар ишлэл

Хэрэв мөрийг давхар хашилтанд (") хавсаргасан бол PHP нь дараах тусгай тэмдэгтүүдийн дарааллыг хүлээн зөвшөөрдөг:

Зугтах дараалал
Дараалал Утга
\n шинэ мөр (ASCII дахь LF эсвэл 0x0A (10))
\r тээвэрлэлтийн буцаалт (ASCII дахь CR эсвэл 0x0D (13))
\t хэвтээ таб (ASCII дээр HT эсвэл 0x09 (9))
\v босоо таб (ASCII дахь VT эсвэл 0x0B (11)) (PHP 5.2.5-аас хойш)
\e зугтах тэмдэгт (ESC эсвэл ASCII дахь 0x1B (27)) (PHP 5.4.4-с хойш)
\f хуудасны хангамж (FF эсвэл ASCII дахь 0x0C(12)) (PHP 5.2.5-аас хойш)
\\ урвуу зураас
\$ долларын тэмдэг
\" давхар ишлэл
\{1,3} Нэг байтад багтахын тулд чимээгүйхэн дүүрдэг наймт тэмдэгтийн ердийн илэрхийлэлтэй тохирох тэмдэгтүүдийн дараалал (жишээ нь: "\400" === "\000")
\x(1,2) арван зургаатын тооллын тэмдэгтийн ердийн илэрхийлэлд тохирох тэмдэгтүүдийн дараалал
\u(+) UTF-8 дүрслэл дэх мөрт буулгах Юникод тэмдэгтийн ердийн илэрхийлэлтэй тохирох тэмдэгтүүдийн дараалал (PHP 7.0.0 дээр нэмсэн)

Ганц хашилтанд орсон тэмдэгт мөрийн нэгэн адил ямар ч тэмдэгтээс зугтах нь мөн зугтах тэмдэгтийг өөрөө гаргах болно. PHP 5.1.1-ээс өмнө урвуу зураасаар зур \($var)хэвлэгдээгүй.

Хередок

Мөрүүдийг тодорхойлох гурав дахь арга бол heredoc синтакс ашиглах явдал юм. <<< . Энэ операторын дараа та тодорхойлогч, дараа нь шугамын тэжээлийг зааж өгөх ёстой. Үүний дараа мөр нь өөрөө гарч ирдэг бөгөөд дараа нь ижил танигч, оруулгыг хаадаг.

Шугам ёстойхаах танигчаар эхлэх, i.e. энэ нь мөрийн эхний баганад харагдах ёстой. Нэмж дурдахад, танигч нь PHP-ийн бусад бүх шошготой адил нэрлэх дүрмийг баримтлах ёстой: зөвхөн үсэг, тоон тэмдэгтүүд болон доогуур зураас агуулсан байх ёстой бөгөөд тоогоор эхэлж болохгүй (доод зураасыг зөвшөөрдөг).

Анхаар

Хаалтын танигчийн мөрөнд цэг таслалаас бусад тэмдэгт агуулаагүй байхыг анхаарах нь маш чухал юм ( ; ). Энэ нь id гэсэн үг доголтой байж болохгүймөн цэг таслалаас өмнө болон хойно ямар ч хоосон зай, таб байж болохгүй. Хаах танигчийн өмнөх эхний тэмдэгт нь таны үйлдлийн системээр тодорхойлсон шинэ мөр байх ёстой гэдгийг ойлгох нь чухал. Жишээлбэл, UNIX системүүд, түүний дотор macOS дээр энэ нь \n. Шинэ мөр нь хаалтын танигчийн дараа шууд эхлэх ёстой.

Хэрэв энэ дүрэм зөрчигдөж, хаалтын танигч нь "цэвэр" биш байвал хаалтын танигч байхгүй гэж үздэг бөгөөд PHP цаашид үргэлжлүүлэн хайх болно. Хэрэв энэ тохиолдолд зөв хаах танигч хэзээ ч олдохгүй бол скриптийн төгсгөлд мөрийн дугаартай задлан шинжлэхэд алдаа гарна.

Жишээ №1 Буруу синтаксийн жишээ

анги foo (
нийтийн $bar =<<баар
EOT;
// хаалтын тодорхойлогчийн өмнө догол оруулахыг хориглоно
}
?>

Жишээ №2 Зөв синтаксийн жишээ

анги foo (
нийтийн $bar =<<баар
EOT;
}
?>

Heredoc-ийг ангийн талбаруудыг эхлүүлэхэд ашиглах боломжгүй.

Хередок текст нь давхар хашилтанд тэмдэглэгдсэн тэмдэгт мөртэй адил үйлдэл хийдэг.

Энэ нь та heredoc дахь ишлэлээс зугтах шаардлагагүй гэсэн үг, гэхдээ та дээрх зугтах дарааллыг ашиглаж болно.

Хувьсагчдыг боловсруулдаг, гэхдээ та heredoc доторх нарийн төвөгтэй хувьсагчдыг мөртэй ажиллахтай адил болгоомжтой хийх хэрэгтэй.<<Жишээ №3 Хередок мөрийн тодорхойлолтын жишээ
$str =
Жишээ мөр,
хэд хэдэн мөрийг хамарсан,

heredoc синтакс ашиглан.
{
EOD;
Анги аа

var $foo ;
{
var $bar ;
Function__construct()
}
}

$this -> foo = "Foo" ;
$энэ ->

$foo = шинэ foo();<<$name = "Нэр"; .
цуурай
Намайг "$name" гэдэг. Би $foo -> foo гэж бичнэ .
Одоо би дүгнэлт хийж байна
EOT;
?>

( $foo -> бар [ 1 ])

Энэ нь том "А" үсгийг гаргах ёстой: \x41

Намайг "Нэр" гэдэг. Би Foo гэж бичдэг. Одоо би Bar2 гаргалаа. Энэ нь том "А" үсгийг гаргах ёстой: A

Функцийн аргументуудаар өгөгдөл дамжуулахын тулд heredoc синтакс ашиглах боломжтой.

5.3.0 хувилбараас хойш heredoc синтакс ашиглан статик хувьсагч болон ангиллын шинж чанар/тогтмолуудыг эхлүүлэх боломжтой болсон.
Жишээ # 5 Статик хувьсагчдыг эхлүүлэхийн тулд heredoc ашиглаж байна
{
// Статик хувьсагч<<функц foo()
статик $bar =
}

Энд юу ч байхгүй ...
LABEL;
{
// Тогтмол/ангиллын шинж чанарууд<<анги foo
const BAR =

Тогтмолыг ашиглах жишээ<<ФОБАР;
const BAR =
}
?>

Нийтийн $baz =

Талбарыг ашиглах жишээ

PHP 5.3.0-аас эхлэн та Heredoc танигчийг давхар хашилтаар хүрээлж болно. Nowdoc Nowdoc нь дан хашилттай тэмдэгт мөрүүдийн хувьд heredoc нь давхар хашилттай мөрттэй адил юм. Nowdoc нь гередоктой төстэй, гэхдээ дотроо орлуулалт хийгдээгүй

. Энэхүү загвар нь PHP код эсвэл бусад том текст блокуудыг үүнээс зугтахгүйгээр оруулахад тохиромжтой. Энэ нь SGML бүтэцтэй бага зэрэг төстэй юм <<< боловсруулахаар төлөвлөөгүй текстийн блокыг зарлах замаар. <<<"EOT" Nowdoc-ийг ижил дарааллаар зааж өгсөн болно

, энэ нь heredoc-д хэрэглэгддэг боловч дараах танигчийг дан хашилтанд оруулсан болно, жишээлбэл,

$foo = шинэ foo();<<<"EOD"
.
Heredoc танигчдад хамаарах бүх нөхцөлүүд, ялангуяа хаалтын танигчид хамаарах бүх нөхцөлүүд nowdoc-д мөн хамаарна.
Жишээ №7 Nowdoc ашиглах жишээ
Жишээ текст,
хэд хэдэн мөрийг хамардаг

nowdoc синтакс ашиглан. Урвуу зураасыг үргэлж шууд утгаар нь авч үздэг.

Nowdoc синтакс ашиглан олон мөрийг хамарсан текстийн жишээ. Урвуу зураасыг \\ ба \" гэх мэт шууд утгаар нь авч үздэг.

Жишээ №8 Хувьсагчтай Nowdoc стринг иш татах жишээ

/* Хувьсагчтай илүү төвөгтэй жишээ. */
LABEL;
{
нийтийн $foo ;
нийтийн $bar;

var $foo ;
{
var $bar ;
$this -> bar = array("Bar1" , "Bar2" , "Bar3" );
}
}

$this -> foo = "Foo" ;
$энэ ->

$foo = шинэ foo();<<<"EOT"
Намайг "$name" гэдэг. Би $foo->foo хэвлэнэ.
Одоо би ($foo->bar) хэвлэж байна.
Энэ нь "А" том үсгийг гаргах ёсгүй: \x41
EOT;
?>

nowdoc синтакс ашиглан. Урвуу зураасыг үргэлж шууд утгаар нь авч үздэг.

Намайг "$name" гэдэг. Би $foo->foo хэвлэнэ. Одоо би ($foo->bar) хэвлэж байна. Энэ нь "А" том үсгийг гаргах ёсгүй: \x41

Жишээ №9 Статик өгөгдлийг ашиглах жишээ

анги foo (
нийтийн $bar =<<<"EOT"
баар
EOT;
}
?>

Сэтгэгдэл:

nowdoc дэмжлэгийг PHP 5.3.0 дээр нэмсэн.

Хувьсагчдыг зохицуулах

Хэрэв мөрийг давхар хашилтанд эсвэл heredoc ашиглан зааж өгсөн бол түүний доторх хувьсагчдыг боловсруулдаг.

Синтакс нь энгийн ба төвөгтэй гэсэн хоёр төрөлтэй. Энгийн синтакс нь илүү хялбар бөгөөд илүү тохиромжтой. Энэ нь хувьсагч, массивын утгыг боловсруулах боломжтой болгодог (массив ) эсвэл объектын шинж чанарууд (объект

) хамгийн бага хүчин чармайлтаар.

Нарийн төвөгтэй синтаксийг илэрхийлэлийг тойрсон буржгар хаалтаар тодорхойлж болно.

Энгийн синтакс $ Хэрэв орчуулагч долларын тэмдэгтэй таарвал (

), энэ нь хүчинтэй хувьсагчийн нэр үүсгэхийн тулд аль болох олон тэмдэгтийг агуулна. Хэрэв та нэрний төгсгөлийг зааж өгөхийг хүсвэл буржгар хаалтанд хувьсагчийн нэрийг бичнэ үү.

$ шүүс = "алим" ;

echo "Тэр долларын шүүсний шүүс уусан." . PHP_EOL;
// Буруу. "s" нь хувьсагчийн нэрийн хүчинтэй тэмдэгт боловч хувьсагчийг $juice гэж нэрлэдэг.

echo "Тэр $juices хийсэн шүүс уусан." ;
// Зөв. Хувьсагчийн нэрний төгсгөлийг хаалт ашиглан хатуу зааж өгсөн болно.
?>

nowdoc синтакс ашиглан. Урвуу зураасыг үргэлж шууд утгаар нь авч үздэг.

echo "Тэр $( шүүс ) s хийсэн шүүс уусан." ;

Тэр алимны шүүс уув. Тэр хийсэн шүүс уув. Тэр алимаар хийсэн шүүс уув. Энгийн синтакс нь илүү хялбар бөгөөд илүү тохиромжтой. Энэ нь хувьсагч, массивын утгыг боловсруулах боломжтой болгодог (Массив элемент ( ) эсвэл объектын шинж чанарууд () эсвэл объектын өмч ( ] ). Массивын индексүүдэд хаалтын дөрвөлжин хаалт байдаг (

) индексийн тодорхойлолтын төгсгөлийг тэмдэглэнэ. Энгийн хувьсагчтай адил дүрмүүд нь объектын шинж чанаруудад хамаарна.

Жишээ №10 Энгийн синтакс жишээ
тодорхойлох ("KOOLAID" , "koolaid1" );

$juices = массив("алим" , "улбар шар" , "koolaid1" => "нил ягаан" );
echo "Тэр $juices [ 0 ] шүүс уусан." . PHP_EOL;
echo "Тэр хэдэн $жүүс [1 ] шүүс уусан." . PHP_EOL;

echo "Тэр хэдэн $juices [koolaid1 ] шүүс уусан." . PHP_EOL;
ангийн хүмүүс (
нийтийн $ john = "Жон Смит" ;
нийтийн $ jane = "Жэйн Смит" ;

нийтийн $ Роберт = "Роберт Паулсен" ;
}

Нийтийн $smith = "Смит" ;

echo "$хүмүүс -> Жон хэдэн $жүүс [ 0 ] шүүс уусан." . PHP_EOL;
echo " $хүмүүс -> Жон дараа нь $хүмүүс -> Жэйнтэй мэндчилжээ." . PHP_EOL;
echo "$ хүмүүс -> Жонны эхнэр $ хүмүүс -> Роберт мэндчилэв." . PHP_EOL;
echo " $хүмүүс -> Роберт $хүмүүс -> Смит хоёртой мэндчилэв." ; // ажиллахгүй
?>

nowdoc синтакс ашиглан. Урвуу зураасыг үргэлж шууд утгаар нь авч үздэг.

Тэр алимны шүүс уув. Тэр жүржийн шүүс уув. Тэр нил ягаан шүүс уув. Жон Смит алимны шүүс уусан. Дараа нь Жон Смит Жэйн Смиттэй мэндчилжээ. Жон Смитийн эхнэр Роберт Паулсен хоёрыг угтан авав.

PHP 7.1.0 нэмэлт дэмжлэг сөрөгтоон индексүүд.

Жишээ №11 Сөрөг тоон индексүүд

$string = "string" ;
цуурай "-2 индекс дэх тэмдэгт нь тэнцүү байна$string [- 2 ] ." , PHP_EOL ;
$string [- 3 ] = "o" ;
цуурай "-3 байрлал дахь тэмдэгтийг "o" болгож өөрчлөхөд дараах мөр гарч ирнэ.$string." , PHP_EOL;
?>

nowdoc синтакс ашиглан. Урвуу зураасыг үргэлж шууд утгаар нь авч үздэг.

-2 индекстэй тэмдэгт нь n-тэй тэнцүү байна. -3 байрлал дахь тэмдэгтийг "o" болгож өөрчлөхөд дараах мөр гарч ирнэ: хүчтэй

Илүү төвөгтэй зүйл бол нарийн төвөгтэй синтакс ашиглана уу.

Нарийн төвөгтэй (буржгар) синтакс

Үүнийг ойлгоход хэцүү биш, харин нийлмэл хэллэгийг ашиглах боломжийг олгодог учраас нийлмэл гэж нэрлэдэг.

Мөрт дүрслэгдсэн аливаа скаляр хувьсагч, массив элемент эсвэл объектын шинж чанарыг энэ синтакс ашиглан тэмдэгт мөрөнд дүрсэлж болно. Илэрхийлэлийг мөрийн гадна талд бичсэнтэй адил бичээд дараа нь орооно { Тэгээд } . Түүнээс хойш { зугтах боломжгүй, энэ синтакс зөвхөн тухайн үед танигдах болно $ шууд дагадаг { . Ашиглах {\$ хэвлэх {$ .

Хэд хэдэн тод жишээ:
// Бүх алдааг харуулах

алдааны_тайлагнах(E_ALL);

$ агуу = "агуу" ;
// ажиллахгүй байна, гаралт: Энэ бол (гайхалтай)

echo "Энэ бол ( $ агуу )" ;
// Ажил, гаралт: Энэ бол гайхалтай

echo "Энэ бол ( $ агуу ) " ;
цуурай // Ажил"Энэ талбай өргөн

( $square -> өргөн ) 00 сантиметр." ;
// Ажил, иш татсан түлхүүр үгс нь зөвхөн буржгар хаалтны синтакс дээр ажиллана

echo "Энэ бол ( $ агуу ) " ;
echo "Энэ ажиллаж байна: ( $arr [ "түлхүүр" ]) " ;

echo "Энэ ажиллана: ( $arr [ 4 ][ 3 ]) " ;
// Энэ нь $foo гаднах шалтгааны улмаас хүчингүй
// мөр. Өөрөөр хэлбэл, энэ нь ажиллах болно,
// гэхдээ PHP эхлээд foo тогтмолыг хайдаг тул энэ нь шалтгаан болно
цуурай // түвшний алдаа E_NOTICE (тодорхойгүй тогтмол)."Энэ буруу байна:

( $arr [ foo ][ 3 ]) " ;
// Ажил. Олон хэмжээст массивыг дотооддоо ашиглах үед
// мөрүүд үргэлж буржгар хаалт ашигладаг

echo "Энэ ажиллана: ( $arr [ "foo" ][ 3 ]) " ;
// Ажил.

цуурай echo "Энэ ажилладаг: " . $arr [ "foo" ][ 3 ];( $obj -> утгууд [ 3 ]-> нэр ) " ;

цуурай "Энэ бол нэрлэсэн хувьсагчийн утга юм$нэр : ($( $нэр )) " ;

цуурай "Энэ нь getName()-ийн буцаадаг хувьсагчийн нэрний утга юм:($( getName ())) " ;

цуурай "Энэ нь \$object->getName()-ийн буцаадаг нэрээрх хувьсагчийн утга юм:($( $object -> getName ())) " ;

// ажиллахгүй байна, гаралт: Энэ бол getName() буцаана: (getName())
цуурай "Энэ бол getName()-ийн буцаадаг зүйл: (getName())";
?>

Мөн энэ синтаксийг ашиглан мөр доторх объектын шинж чанаруудад хандах боломжтой.

анги foo (
var $bar = "Би бол баар." ;
}

$this -> foo = "Foo" ;
$bar = "бар";
$baz = массив("foo" , "bar" , "baz" , "quux");
echo " ( $foo -> $bar ) \n" ;
echo " ( $foo ->( $baz [ 1 ])) \n" ;
?>

nowdoc синтакс ашиглан. Урвуу зураасыг үргэлж шууд утгаар нь авч үздэг.

Би баар. Би баар.

Сэтгэгдэл:

Функцууд, аргын дуудлагууд, статик ангиллын хувьсагчууд, ангийн тогтмолууд нь дотооддоо ажилладаг {$} , PHP-ээс эхлэн 5. Гэсэн хэдий ч нийлүүлсэн утгыг тодорхойлогдсон мөртэй ижил контекстэд хувьсагчийн нэрээр авч үзэх болно. Ганц буржгар хаалт ашиглах ( {} ) функц, аргууд, ангиллын тогтмолууд эсвэл статик ангийн хувьсагчийн утгуудад хандахад ажиллахгүй.

Хэд хэдэн тод жишээ:
// Бүх алдааг харуулах

ангиллын шар айраг (
const softdrink = "rootbeer" ;
нийтийн статик $ale = "ipa" ;
}

$rootbeer = "A & W" ;
$ipa = "Александр Кейт" ;

// Энэ нь ажиллана, гарна: I would like A & W
echo "Би хүсч байна ($( шар айраг :: зөөлөн ундаа )) \n" ;

// Энэ нь бас ажилладаг, гаралт: I would like Alexander Keith's
echo "Би хүсч байна ($( шар айраг :: $ale )) \n" ;
?>

Мөр дэх тэмдэгтэд хандах, өөрчлөх

Мөр дэх тэмдэгтүүдийг мөрийн дараа дөрвөлжин хаалтанд тэгээс эхлэн тэмдэгтүүдийн офсетийг зааж өгснөөр ашиглаж, өөрчилж болно, жишээ нь $str . Энэ зорилгоор мөрийг тэмдэгтүүдийн массив гэж бод.Тэгээд Хэрэв та 1-ээс олон тэмдэгт авах эсвэл солих шаардлагатай бол функцуудыг ашиглаж болно.

Сэтгэгдэл: substr() substr_replace() PHP 7.1.0 хувилбарын хувьд сөрөг офсет утгыг дэмждэг. Тэд мөрийн төгсгөлөөс офсетийг зааж өгдөг. Өмнө нь сөрөг офсет нь түвшний алдаа үүсгэдэгЭ_МЭДЭГДЭЛ

Сэтгэгдэл: унших (хоосон мөрийг буцаах) эсвэл

Анхаар

ЦАХИМ АНХААРУУЛГА Тэд мөрийн төгсгөлөөс офсетийг зааж өгдөг. Өмнө нь сөрөг офсет нь түвшний алдаа үүсгэдэг.

Анхаар

Зөвхөн томилогдсон мөрийн эхний тэмдэгтийг ашиглана.

Сэтгэгдэл: PHP 7.1.0-ийн хувьд хоосон мөрийг оноох нь ноцтой алдаа гаргах болно. Өмнө нь энэ тохиолдолд тэг байт (NULL) оноогдсон.

РНР дахь мөрүүд нь байтуудын дотоод массив юм. Үүний үр дүнд, стринг офсет дээр хандах эсвэл өөрчлөх нь олон байт кодчилолд аюулгүй биш бөгөөд зөвхөн ISO-8859-1 гэх мэт ганц байт кодчилол бүхий мөртүүдийг ашиглан хийх ёстой.

PHP 7.1.0, хоосон индекс ашиглах нь өмнө нь аюултай алдаа үүсгэдэг тул энэ тохиолдолд мөрийг сануулгагүйгээр массив болгон хувиргасан;
Жишээ №12 Зарим жишээ мөрүүд
// Мөрний эхний тэмдэгтийг авна

$str = "Энэ бол туршилт." ;
$first = $str [ 0 ];

// Мөрний гурав дахь тэмдэгтийг авна
$third = $str [ 2 ];
// Мөрний сүүлчийн тэмдэгтийг авна

$str = "Энэ бол туршилт хэвээр байна." ;
$ last = $str [ strlen ($str ) - 1 ];
// Мөрийн сүүлчийн тэмдэгтийг өөрчлөх

?>

$str = "Далайг хар" ; $str [ strlen ($str )- 1 ] = "e" ; PHP 5.4-ийн хувьд мөр дэх офсетийг бүхэл тоо эсвэл цифр агуулсан мөр гэж зааж өгөх ёстой, эс бөгөөс анхааруулга өгөх болно. Өмнө нь өгөгдсөн офсет шиг мөр 0 .

"хөө"

, сануулгагүйгээр хувиргасан

Жишээ №13 PHP 5.3 ба PHP 5.4-ийн ялгаа
$str = "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 дээр ажиллуулсны үр дүн:

string(1) "b" bool(true) string(1) "b" bool(true) string(1) "a" bool(true) string(1) "b" bool(true)

Сэтгэгдэл:

Энэ жишээг PHP 5.4 дээр ажиллуулсны үр дүн: string(1) "b" bool(true) Анхааруулга: 7-р мөрөнд /tmp/t.php-д "1.0"-ийн хууль бус мөр офсет string(1) "b" bool(false) Анхааруулга: /-д хууль бус мөр офсет "x" tmp/t.php 9-р мөрөнд string(1) "a" bool(false) string(1) "b" bool(худал) {} Бусад төрлийн хувьсагчдад (тодорхой интерфэйсийг хэрэгжүүлдэг массив эсвэл объектоос бусад) хандахыг оролдож байна. эсвэл.

Сэтгэгдэл:

чимээгүйхэн буцаж ирнэ NULL {} .

PHP 5.5 нь синтакс ашиглан string literal дахь тэмдэгтүүдэд хандах дэмжлэгийг нэмсэн

эсвэл

Мөрүүдийг өөрчлөх олон ашигтай функцууд байдаг.

Үндсэн функцуудыг мөрийн функцүүдийн хэсэгт тайлбарласан бөгөөд дэвшилтэт хайлт, солихын тулд Perl-тэй нийцтэй тогтмол илэрхийллийн функцууд. Мөр рүү хөрвүүлэхЦутгамал ашиглан утгыг мөр болгон хөрвүүлж болно strval(). цуурай string(1) "b" bool(true) Анхааруулга: 7-р мөрөнд /tmp/t.php-д "1.0"-ийн хууль бус мөр офсет string(1) "b" bool(false) Анхааруулга: /-д хууль бус мөр офсет "x" tmp/t.php 9-р мөрөнд string(1) "a" bool(false) string(1) "b" bool(худал) Мөр шаардлагатай илэрхийлэлд хөрвүүлэлт автоматаар явагдана.Энэ нь функцийг ашиглах үед тохиолддог хэвлэх.

, эсвэл хувьсагчийн утгыг мөртэй харьцуулах үед. Гарын авлагын Төрөл ба Төрөл засварлах хэсгүүдийг уншсанаар дараахь зүйлийг илүү ойлгомжтой болгоно. Мөн үзнэ үү settype()Массивыг үргэлж мөр болгон хөрвүүлдэг Энгийн синтакс нь илүү хялбар бөгөөд илүү тохиромжтой. Энэ нь хувьсагч, массивын утгыг боловсруулах боломжтой болгодог ("Массив" цуурай NULL Мөр шаардлагатай илэрхийлэлд хөрвүүлэлт автоматаар явагдана., тиймээс та массивын агуулгыг харуулах боломжгүй ( ), ашиглахюу агуулагдаж байгааг харахын тулд. Нэг элементийг үзэхийн тулд иймэрхүү зүйлийг ашиглана уу

echo $arr["foo"] . Бүх агуулгыг хэрхэн харуулах/үзэх талаарх зөвлөмжийг доороос үзнэ үү.Төрөл хувьсагчийг хөрвүүлэхийн тулд "Объект"төрлөөр

мөр эсвэл __toString шидэт аргыг ашигладаг.

Утга үргэлж хоосон мөр рүү хөрвүүлэгддэг.Тэгээд Дээр дурдсанчлан массив, объект эсвэл нөөцийг шууд мөр болгон хөрвүүлэх нь тэдгээрийн төрлөөс өөр утгуудын талаар ашигтай мэдээлэл өгөхгүй..

Дибаг хийх утгыг гаргах илүү сайн арга бол функцуудыг ашиглах явдал юм хэвлэх_r().

var_dump()

PHP дахь ихэнх утгыг байнгын хадгалалтанд зориулж мөр болгон хөрвүүлж болно. Энэ аргыг цуваа болгох гэж нэрлэдэг бөгөөд функцийг ашиглан хийж болно

цуврал болгох() Мөрүүдийг тоо руу хөрвүүлэхХэрэв мөрийг тоон утга гэж хүлээн зөвшөөрвөл гарах утга, төрлийг дараах байдлаар тодорхойлно. Хэрэв мөр нь ".", "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)
?>

Энэ хөрвүүлэлтийн талаарх дэлгэрэнгүй мэдээллийг Unix баримт бичгийн strtod(3) хэсгээс үзнэ үү.

Хэрэв та энэ хэсэгт байгаа жишээнүүдийн аль нэгийг туршиж үзэхийг хүсвэл юу болохыг харахын тулд үүнийг болон дараах мөрийг хуулж буулгана уу.

echo "\$foo== $foo; бичнэ үү: " . gettype ($foo) . "
\n" ;
?>

Тэмдэгтийн кодыг бүхэл тоо болгон хувиргаж авна гэж битгий бодоорой (жишээ нь, C хэл дээр). Тэмдэгтүүдийг ASCII код болон буцааж хөрвүүлэхийн тулд функцуудыг ашиглана уу ord()Тэгээд chr().

Стринг төрлийн хэрэгжилтийн дэлгэрэнгүй

7 жилийн өмнө

Баримт бичигт дурдаагүй боловч heredoc-ийн төгсгөлд байгаа хаалтын цэгийг жинхэнэ цэгтэй таслал гэж тайлбарладаг тул заримдаа үг хэллэгийн алдаа гаргахад хүргэдэг.

$foo =<<abcd
END;
?>

Үүнд:

foo (<<abcd
END;
);
// синтакс алдаа, гэнэтийн ";"
?>

Цэг таслалгүй бол энэ нь сайн ажилладаг:

foo (<<abcd
Төгсгөл
);
?>

3 жилийн өмнө

Та тэмдэгтийн массив шиг мөр ашиглаж болно (C гэх мэт)

$a = "Мөрт массивын тест";

var_dump($a);
// Буцах мөр(17) "Мөр массивын тест"

var_dump($a);
// Буцах мөр(1) "S"

// -- Цутгамал массивтай --
var_dump((массив) $a);
// Буцах массив(1) ( => string(17) "Мөрт массив тест")

var_dump((массив) $a);
// Буцах мөр(17) "S"

Норихиори

15 жилийн өмнө

Та объектын шинж чанар болон объектын аргуудын утгыг мөр дотор оруулахын тулд нарийн төвөгтэй синтакс ашиглаж болно. Жишээ нь...
ангийн тест(
нийтийн $ нэг = 1 ;
нийтийн функц хоёр() (
буцах 2;
}
}
$test = шинэ тест();
echo "foo ( $test -> one ) bar ( $test -> хоёр ()) " ;
?>
"foo 1 bar 2" гаргана.

Гэсэн хэдий ч та өөрийн нэрийн орон зайн бүх утгын хувьд үүнийг хийх боломжгүй. Нарийн төвөгтэй синтакс нь "$"-г хайж байгаа тул ангийн тогтмолууд болон статик шинж чанарууд/аргачлалууд ажиллахгүй.
ангийн тест(
const ONE = 1;
}
echo "foo (Test::ONE) bar" ;
?>
Энэ нь "foo (Test:: one) bar" гаргана. Тогтмол болон статик шинж чанарууд нь мөрийг задлахыг шаарддаг.

3 жилийн өмнө

"Тоонууд руу хөрвүүлэх мөр"-тэй нийцэж байгааг анхаарна уу:

Хэрэв ("123abc" == 123 ) цуурай "(intstr == int) үнэн гэж буруу шалгаж байна.";

// Нэг тал нь тоо учраас мөрийг intstr-аас int руу буруу хөрвүүлсэн бөгөөд энэ нь тестийн дугаартай таарч байна.

// if, switch хэллэг зэрэг бүх нөхцөлт үнэн (магадгүй while давталт ч байж магадгүй)!

// Энэ нь зөвхөн бүхэл тоог хүлээж, турших үед хэрэглэгчийн оролтыг турших/ашиглах/хадгалах үед аюулгүй байдлын асар том эрсдэл байж болзошгүй.

// Ганц засвар бол 123-ыг "123" гэсэн мөр байх тул хөрвүүлэлт хийхгүй.

?>

6 жилийн өмнө

Мөр дэх тэргүүлэгч тэгүүдийг (хамгийн бага гайхшрал) наймтын тоо гэж тооцдоггүй.
Үүнд:
$x = "0123" + 0;
$y = 0123 + 0;
echo "x нь $x, y нь $y"; //"x нь 123, y нь 83" гэж хэвлэнэ.
өөрөөр хэлбэл:
* эх кодын тоон үсгийн эхний тэгийг "наймт" гэж тайлбарласан, c.f. strtol().
* бүхэл тоо руу шилжүүлэх (далд эсвэл илт) үл тоомсорлож, аравтын бутархай гэж үзэх үед мөрийн эхний тэг (жишээ нь хэрэглэгчийн илгээсэн өгөгдөл), c.f. strtod().

10 жилийн өмнө

Давхар иш татсан мөрүүд болон гередокуудад тогтмол болон бусад функцийн дуудлагуудыг оруулаад буржгар хаалтанд дурын илэрхийлэл агуулж болохыг хялбархан хакердаж байна.

// Хакердсан мэдэгдэл
функц _expr ($v ) ( буцаах $v ; )
$_expr = "_expr" ;

// Манай тоглоомын талбай
тодорхойлох("qwe" , "asd");
тодорхойлох("zxc", 5 );

$a= 3 ;
$b= 4 ;

функц в($a, $b) (буцах$a+ $b; }

// Хэрэглээ
цуурай"урьдчилан{ $_expr(1 + 2 )} нийтлэх\n"; // "3 нийтлэлийн өмнөх" гаралт
цуурай"урьдчилан{ $_expr(qwe)} нийтлэх\n"; // "pre asd post" гаралт
цуурай"урьдчилан{ $_expr(в($a, $b)+ zxc* 2 )} нийтлэх\n"; // "17-ны өмнөх бичлэг" гаралт

// Ерөнхий синтакс нь ($_expr(...))
?>

2 жилийн өмнө

Мэдээллийг ядаж PHP сайтын зөв хуудсан дээр харуулахын тулд энэ тайлбарыг нэмэх нь ашигтай байх болно гэж би бодож байна.

Хэрэв та давхар хашилттай мөрийг ассоциатив түлхүүрээр ашиглахаар төлөвлөж байгаа бол T_ENCAPSED_AND_WHITESPACE алдаа гарч болзошгүйг анхаарна уу. Зарим нь үүнийг бага илэрхий алдааны мэдэгдлүүдийн нэг гэж үздэг.

Ийм илэрхийлэл:

$ жимс=массив(
"а"=> "алим",
"б"=> "гадил жимсний",
// гэх мэт
);

Хэвлэх "Энэ бол а$ жимс[ "a"]"; // T_ENCAPSED_AND_WHITESPACE
?>

хэсэгчлэн унах нь гарцаагүй.

Та үүнийг дараах байдлаар шийдэж болно.

Мөр шаардлагатай илэрхийлэлд хөрвүүлэлт автоматаар явагдана."Энэ бол а$ жимс[ а] " ; // түлхүүрийн ишлэлийг арилгана
Мөр шаардлагатай илэрхийлэлд хөрвүүлэлт автоматаар явагдана."Энэ бол а${ жимс[ "а"]} " ; // Нарийн төвөгтэй синтакс
Мөр шаардлагатай илэрхийлэлд хөрвүүлэлт автоматаар явагдана."Энэ бол а{ $ жимс[ "а"]} " ; // Complex syntax variation
?>

Би хамгийн сүүлийн хувилбарыг илүүд үздэг, учир нь энэ нь утгын гадна илэрхийлэл ямар байх нь илүү байгалийн бөгөөд ойр байдаг.

PHP яагаад илэрхийлэл доторх ганц эшлэлийг буруу тайлбарлаж байгаа нь тодорхойгүй байна (наад зах нь миний хувьд) гэхдээ энэ нь ишлэл нь утгын мөрийн нэг хэсэг биш байгаатай холбоотой гэж би төсөөлж байна - мөрийг аль хэдийн задлан шинжилж байгаа бол хашилтыг зөвхөн саад болох уу...?

2 жилийн өмнө

Хоёулаа ажиллах ёстой :(

ангиТуршилт хийх{
нийтийн статик
$VAR= "статик";
public const VAR =
"const";

Нийтийн чиг үүрэг HelloStatic гэж хэлээрэй() {
цуурай
"Сайн уу:{ $энэ:: $VAR} " ;
}

Нийтийн чиг үүрэг гэж хэлэхHelloConst() {
цуурай
"Сайн уу:{ $энэ::VAR)" ; //Шинжилгээний алдаа: синтакс алдаа, гэнэтийн ")", хүлээгдэж буй "["
}
}

$obj= шинэТуршилт хийх();
$obj-> HelloStatic гэж хэлээрэй();
$obj-> гэж хэлэхHelloConst();

3 жилийн өмнө

Миний мэдэрсэн зүйл хэн нэгэнд туслах нь дамжиггүй. . .
Миний засварлагч дээр энэ нь HTML болон $ тайлбарыг синтаксоор тодотгох болно:

$html =<<<"EOD"
$ сэтгэгдэл
хэд хэдэн мөрийг хамарсан,

Үүнийг ашигласнаар бүгд ижил өнгөтэй байна:

$html =<<$ сэтгэгдэл
хэд хэдэн мөрийг хамарсан,

ажиллахад маш хялбар болгодог

11 жилийн өмнө

Оюун санаагаа аврахын тулд болзооны талаарх өмнөх сэтгэгдлийг бүү унш ;)

Хоёр мөрийг ("$a" > "$b" тестийн) тоонууд руу хөрвүүлэх боломжтой үед гарсан тоонуудыг ашиглана, эс бөгөөс БҮТЭН мөрүүдийг тэмдэгтээр нь харьцуулна:

var_dump("1.22" > "01.23" ); //bool(худал)
var_dump("1.22.00" > "01.23.00" ); //bool(үнэн)
var_dump("1-22-00" > "01-23-00" ); //bool(үнэн)
var_dump((хөвөг)"1.22.00" > (хөвөгч)"01.23.00" ); //bool(худал)
?>

РНР дахь мөрүүд нь дан эсвэл давхар хашилтаар хүрээлэгдсэн байдаг. Гол ялгаа нь та хувьсагчийг давхар хашилтанд оруулж болно.

Одоо бид PHP хэл дээрх хувьсагчид хичээлээс асуудлын өөр шийдлийг гаргаж ирж болно.

$ гарчиг"; цуурай "

$ контент
"; ?>

PHP нь мөр доторх хувьсагчийг хэрхэн олох вэ?

Энэ бол энгийн. Хувьсагчийн нэрэнд ямар тэмдэгт ашиглаж болохыг санаж байна уу? Эдгээр нь тоо, үсэг, доогуур зураас _.

Тиймээс PHP нь $ тэмдэг болон эхний хориотой тэмдэгтийн хоорондох бүх зүйлийг нэр болгон авдаг.

Дараах кодонд PHP нь хувьсагчийн нэрийг буруу тодорхойлж, алдаа гаргах болно.

Хөтөч дэх үр дүн:

Анхааруулга: Тодорхойгүй хувьсагч: 3-р мөрөнд D:\OpenServer\domains\site\index.php доторх pricerub

PHP нь мөр дэх хувьсагчийн нэрийг зөв тодорхойлохын тулд та үүнийг буржгар хаалтанд () оруулах хэрэгтэй:

Хөтөч дэх үр дүн:

1499 рубль

Юу ч орлуулах шаардлагагүй энгийн мөрүүдэд ямар ишлэл хэрэглэх талаар тодорхой зөвшилцөл байхгүй байна. Гэсэн хэдий ч олон програмистууд нэг ишлэл ашиглахыг илүүд үздэг.

Олон хүмүүсийн хувьд давхар ишлэл нь "энэ мөрөнд ямар нэгэн зүйл оруулах ёстой" гэсэн холбоог төрүүлдэг. Тиймээс би ердийн текстийн хувьд дан ишлэл, зөвхөн хувьсагчийг текстэнд орлуулах шаардлагатай үед давхар хашилт ашиглахыг зөвлөж байна. Жишээ:

Ишлэлээс зугтаж байна

Хэрэв та мөр дотор ишлэл оруулах шаардлагатай бол үүнийг хийх 2 арга бий:

Хоёрдахь жишээнд, урвуу зураас нь \ дараах ишлэлээс зайлсхийж, PHP үүнийг мөр болгон авч үздэг.

Дэлгэц дээр зөвхөн урвуу зураасыг харуулахын тулд юу хийх хэрэгтэй гэж та бодож байна вэ? Эцсийн эцэст энэ нь хаалтын ишлэлээс зугтах болно. Энэ нь инээдтэй юм, гэхдээ та эхнийхээс зайлсхийхийн тулд хоёр дахь налуу зураасыг бичих хэрэгтэй:

Хүснэгт болон мөр таслах давхар хашилт

Давхар хашилтын урвуу зураас нь зөвхөн ишлэл болон өөрөө төдийгүй бусад тэмдэгтүүдээс зайлсхийх боломжийг олгоно. Хамгийн алдартай нь tab (TAB дарахад гарах урт зай) ба мөр таслах явдал юм. Тэд дараах байдлаар харагдаж байна.

Скрипт бичнэ үү:
1. Game гэсэн утгатай $type хувьсагчийг үүсгэнэ.
2. "World of Warcraft" (хашилтын тэмдэгтэй) утгатай $name хувьсагчийг үүсгэнэ.
3. Таг дотор хувьсагчийг хоёуланг нь харуулна

. Хувьсагчдын хооронд зай байх ёстой.

string төрлийн утгууд нь текстийн мөрүүд (богино мөрүүд) юм. Мөр нь тэг ба түүнээс дээш тэмдэгтүүдийн дараалал юм. Тэмдэгтүүдэд үсэг, тоо, цэг таслал, тусгай тэмдэгт, хоосон зай орно.

Мөрийг дөрвөн өөр аргаар тодорхойлж болно:

  • давхар хашилт
  • ганц ишлэл
  • heredoc синтакс
  • nowdoc синтакс

Давхар хашилтанд тэмдэглээрэй

Давхар хашилт доторх мөр:

Та хоёр хашилттай мөрт зугтах дарааллыг ашиглаж болно. Хяналтын дараалал— эдгээр нь текст гаралтыг форматлахад зориулагдсан тусгай тэмдэгтүүд юм. Дараах зугтах дарааллыг PHP дээр ашиглах боломжтой.

Давхар хашилттай мөрийн гол шинж чанар нь мөр доторх хувьсагчдыг зохицуулах чадвар юм.


Долларын тэмдэг: \$";

Давхар хашилтанд орсон тэмдэгт тэмдэгтүүдийг агуулж болно:

Цуурай "Ганц ишлэл: "";

Ганц хашилт доторх мөр (зайлшгүй тэмдэг)

Ганц ишлэл дэх мөр:

$str = "Мөр"; echo "Уншихад хялбар болгохын тулд нэг том мөрийг хэд хэдэн жижиг мөрөнд хувааж болно.";

Давхар хашилттай тэмдэгт мөрүүд болон гередокын синтаксаас ялгаатай нь хувьсагч болон хяналтын дарааллыг (нэг эс тооцвол) нэг хашилтанд оруулаагүй болно. Энэ нь тэдгээрийг ердийн тэмдэгт тэмдэгт гэж тайлбарлах болно гэсэн үг юм:

$ тоо = 10; echo "Дугаар: $num
Долларын тэмдэг: \$";

Ганц хашилтанд орсон мөрөнд дан хашилтыг ашиглахын тулд та урвуу ташуу зураас (\") ашиглан тэдгээрээс зайлсхийх хэрэгтэй. Хэрэв та урвуу зураасыг өөрөө бичих шаардлагатай бол (\\) хуулбарлах хэрэгтэй:

Цуурай "Дотоод \"ганц\" ишлэл ашиглах"; echo "Уруу зураас: \\";

Ганц хашилтанд орсон мөрүүд нь давхар хашилттай тэмдэгтүүдийг агуулж болно:

Цуурай "Давхар ишлэл: "";

Хередокийн синтакс

Хередок синтакс бол мөр бичих өөр арга юм.

Heredoc синтакс ашиглан тодорхойлсон мөр нь давхар хашилтанд орсон мөртэй адил ажилладаг. Хередок ба давхар хашилттай мөрийн ялгаа нь Хередокийн хувьд давхар хашилтаас зугтах шаардлагагүй юм.

Хередокийн синтакс гурван тэмдэгтээс эхэлдэг<<< , после которых должен быть указан произвольный идентификатор (назовём его открывающим). Идентификатор может быть указан как в двойных кавычках, так и без них. Шуудтанигчийн ард шинэ мөр байх ёстой, танигчийн дараа шинэ мөр байх ёсгүй, эс бөгөөс алдаа гарна. Дараа нь мөрийн агуулга өөрөө ирдэг. Мөрийн агуулгын дараа тусдаа мөрөнд хаах танигчийг зааж өгөх ёстой (дараагийнхтай адил<<<). Перед ним и после него не должно быть никаких пробелов или других символов, за исключением точки с запятой. Если это правило нарушено, то считается, что закрывающий идентификатор отсутствует и будет вызвана ошибка:

<<

Nowdoc синтакс

Nowdoc синтакс нь Heredoc шиг мөр бичих өөр арга юм.

Nowdoc синтакс ашиглан тодорхойлсон мөр нь дан хашилтанд орсон мөртэй адил ажилладаг. Nowdoc ба ганц ишлэл бүхий мөр хоорондын ялгаа нь Nowdoc-ийн тусламжтайгаар ганц хашилтаас зугтах шаардлагагүй юм.

Nowdoc-ийн синтакс нь Heredoc-тэй төстэй бөгөөд цорын ганц ялгаа нь нээлтийн танигчийг дан хашилтанд оруулах ёстой.

$ тоо = 10; цуурай<<<"some_id" Число: $num some_id;

Мөр дэх хувьсагчдыг зохицуулах

Мөр дэх хувьсагчдыг зохицуулах хоёр төрлийн синтакс байдаг: энгийнТэгээд хэцүү.

Энгийн синтакс- энэ нь хувьсагчийн нэрийг мөрөнд байгаагаар нь зааж өгөх явдал юм.

Орчуулагч долларын тэмдэгтэй тулгарах үед дараагийн бүх тэмдэгтүүд хувьсагчийн нэрний хүчинтэй тэмдэгт мөн эсэхийг дараалан шалгаж эхэлдэг. Тиймээс, хүчинтэй хувьсагчийн нэр үүсгэхийн тулд аль болох олон тэмдэгтийг агуулна.

$str = "Дэлхий!"; echo "Сайн уу $str";

Нарийн төвөгтэй синтакс- энэ нь хувьсагчийн нэрийг буржгар хаалтанд оруулах явдал юм.

Нэг мөрөнд хувьсагчийг боловсруулахын тулд орчуулагч аль болох олон тэмдэгтийг авдаг тул орчуулагч хувьсагчийн нэр хаана дуусдагийг бие даан тодорхойлох боломжгүй нөхцөл байдал бий.

$sport1 = "болно"; $sport2 = "хөл"; echo "Би $sport1ball болон $sport2ball-д дуртай";

Энэ тохиолдолд орчуулагч $sport1-ийг байхгүй $sport1bol хувьсагчийн нэг хэсэг гэж үзэх тул хүссэн үр дүнд хүрэхгүй.

Хувьсагчийн нэр хаана төгсдөгийг тайлбарлагчид тодорхой хэлэхийн тулд та хувьсагчийн нэрийг буржгар хаалтанд оруулах хэрэгтэй.

$sport1 = "болно"; $sport2 = "хөл"; echo "Надад ($sport1)bol болон ($sport2)bol таалагддаг.";

Долларын тэмдгийг буржгар хаалтны өмнө болон хойно байрлуулж болно.

$sport1 = "болно"; $sport2 = "хөл"; echo "Би $(спорт1)бол болон ($спорт2)болд дуртай.";

Холболт

Холболт гэдэг нь хоёр ба түүнээс дээш мөрийг нэг том мөрөнд нэгтгэх явдал юм. Холболт нь холбох операторыг ашиглан явагдана - . (цэг). Холбох үед дараагийн мөр бүрийг өмнөх мөрийн төгсгөлд нэмнэ.

Мөртэй холбосон дурын төрлийн утгыг мөр болгон хувиргаж дараа нь нэгтгэнэ:

"; echo "Дугаар: " . 1; ?>

Мөрүүдийг форматлахад би ямар төрлийн ишлэл ашиглах ёстой вэ - апостроф эсвэл сонгодог давхар хашилт?

PHP хэл дээрх давхар ба дан хашилтын ялгааг харцгаая, жишээн дээр аль нь хэзээ хэрэглэхээ олж мэдье.

Ганц хашилтанд орсон тэмдэгтүүдийн хувьсагч болон escape дарааллыг боловсруулдаггүй. Апострофоор хүрээлэгдсэн мөрүүдийг PHP орчуулагч давхар хашилтаар хүрээлэгдсэн ижил төстэй мөрүүдээс хамаагүй хурдан боловсруулдаг.

Шалтгаан нь энгийн: PHP орчуулагч нь хувьсагч байгаа эсэхийг давхар хашилтанд оруулсан мөрүүдийг нэмэлтээр шалгадаг бөгөөд хэрэв тэдгээр нь олдвол хувьсагчийн нэрний оронд түүний утгыг мөрөнд оруулна. Гэхдээ апострофоор тэмдэглэгдсэн мөрийг орчуулагч ердийн текст гэж ойлгодог бөгөөд PHP нь эдгээр мөрөнд ямар ч хувиргалт хийдэггүй. Ямар ч тохиолдолд дан ишлэл дэх мөрүүдийг боловсруулах нь илүү хурдан байх нь ойлгомжтой гэж би бодож байна.

Эхлээд мөрийг хэрхэн тодорхойлохыг тайлбарлаад дараа нь дан ишлэл дэх мөрүүдийг боловсруулахад хэр хурдан болохыг шалгая.

Мөрийг тодорхойлох хамгийн энгийн арга бол түүнийг дан хашилтанд (") оруулах явдал юм. Нэг хашилттай мөр дотор дан хашилтыг ашиглахын тулд тэдгээрийн өмнө урвуу ташуу зураас (\) байх ёстой, өөрөөр хэлбэл зугтсан байх ёстой. Хэрэв ташуу зураас ирэх ёстой. Нэг ишлэлээс өмнө эсвэл мөрийн төгсгөлд байгаа бол та үүнийг хуулбарлах хэрэгтэй. Хэрэв та өөр тэмдэгтээс зугтахыг оролдвол урвуу зураасыг мөн хэвлэх болно.

Ганц ишлэл ашиглах жишээ энд байна:
// Гаралт: Энгийн мөр
echo "Энгийн мөр";
// Хэвлэх: Би энд байна
echo "Би энд байна";
// Гаралт: Энэ нь: \n шинэ мөр оруулахгүй
echo "Энэ нь оруулахгүй:\nшинэ мөр";
// Гаралт: $example хувьсагчийг мөн орлуулахгүй
echo "$example хувьсагчийг бас орлуулахгүй";

Хэрэв мөрийг давхар хашилтанд (") оруулбал PHP нь тусгай тэмдэгтүүдийн хувьд илүү олон escape дарааллыг таних ба мөн тэмдэгт дэх хувьсагчийн нэрний утгыг орлуулдаг. Ганц хашилтын адил давхар хашилтыг давхар хашилтанд оруулсан мөрт ашиглахын тулд ишлэл, тэдгээрийн өмнө урвуу налуу зураас (\) байх ёстой.
// Гаралт: Энгийн мөр
echo "Энгийн мөр";
Давхар хашилтыг ашиглах жишээ энд байна:
// Үр дүн: "Цасан дусал" компани
echo "Компани \"Цасан дусал\"";
// Гаралт: Энэ нь шинэ мөрөнд хүргэнэ
echo "Энэ нь шинэ мөр болж хувирна \n";
// Гаралт: Хувьсагчийг орлуулах болно
echo "Хувьсагч $ жишээ";

Мөн "\n" (шинэ мөр), "\r" (тээвэр буцах) дараалал нь HTML биш харин энгийн текстэд зориулагдсан гэдгийг санах хэрэгтэй. Тиймээс та хөтөч дээрх өөрчлөлтийг харахгүй (зөвхөн хуудасны эх кодонд).
Ганц ишлэл нь давхар хашилтаас хэр хурдан болохыг олж мэдье. Хэмжилтийн хувьд бид богино тестийн скрипт бичих бөгөөд хэрэв та өөрөө үүнийг туршиж үзвэл таны компьютер эсвэл серверийн техник хангамжаас хамаарах үр дүн өөр байх болно гэдгийг бид нэн даруй тэмдэглэх болно.
// Давталтын эхэнд байгаа цагийн тэмдгийг буцаана
$start = microtime(үнэн);
// 1 сая давталт хийх гогцоо үүсгэ< 1000000; $i++) {
төлөө ($i = 0; $i
}
$text = "Энд тэмдэгтийн мөр байна";
// зарцуулсан цагийг тооцоол

$цаг = (микро цаг(үнэн) - $эхлэх);
Үр дүн: 0.09 секунд.

Хэрэв бид дан хашилтыг давхар хашилтаар соливол:
$text = "Энд тэмдэгтийн мөр байна";
Үр дүн нь 0.10 секунд болно.

Таны харж байгаагаар текстийн мөрүүдийг ашиглах үед гүйцэтгэлийн хугацааны ялгаа маш бага байдаг бөгөөд энэ нь огт байхгүй гэж хэлж болно. Бид мөр болон хувьсагчийг нэгтгэхийг оролдох үед хөгжилтэй эхэлдэг.

$text = "Энд $i тэмдэгтийн мөр байна";

эсвэл

Ганц ишлэл

$text = $i."Энд тэмдэгтийн мөр байна";

Үр дүн нь ойролцоогоор: 0.27 секунд.

Энэ ялгаа нь нэлээд мэдэгдэхүйц юм. Мөрт хувьсагч нэмэх үед холболт болон давхар хашилт нь гүйцэтгэлд тодорхой нөлөөлдөг.

Сервер кодыг боловсруулахдаа хувьсагч, тогтмол болон бусад зүйлийг давхар хашилтын бүх агуулгыг шалгадаг. Үүнд цаг хугацаа хэрэгтэй. Мөн сервер нь дан ишлэлүүдийн хооронд байгаа зүйлийг бэлэн текст болгон боловсруулдаг бөгөөд тэнд юу байгаа нь хамаагүй. Ганц болон давхар хашилтын гүйцэтгэлийн ялгаа нь маш бага боловч хэрэв та өндөр ачаалалтай төсөл боловсруулж байгаа бол хэдэн миллисекунд хэмнэгдсэн бол аль хэдийн ялалт юм.:

Давхар ишлэл

РНР хэл дээрх ишлэл нь дан эсвэл давхар байж болох нь нууц биш юм. Хашилтын зарим хэрэглээ хэзээ илүү тохиромжтой болохыг олж мэдье.

Мөрийг тодорхойлох хамгийн энгийн арга бол текстийг дан хашилтанд оруулах явдал юм.

Давхар хашилтанд орсон мөр нь тусгай тэмдэгтүүдийн ихэнх зугтах дарааллыг таньдаг.

Хамгийн чухал ялгаа нь давхар хашилт нь хувьсагчдыг зохицуулдаг явдал юм.

Давхар хашилт ашиглах жишээ:

Давхар хашилттай тэмдэгт мөр нь хувьсагчдыг зохицуулдаг гэдэгт анхаарлаа хандуулцгаая.

Мөрийг боловсруулахад юу болох вэ? Орчуулагч тэмдэгт мөр бүрийг давхар хашилтаар шалгана, өөрөөр хэлбэл албадан задлан шинжилдэг бөгөөд энэ нь нэмэлт цаг шаарддаг. Тийм ээ, энэ нь ихэвчлэн хоёр секундын дотор байдаг, гэхдээ энэ нь өөрөө ойлгох ёстой. Өөрөөр хэлбэл, хэрэв та нэг мөрийн боловсруулалтыг өөр өөр хашилттай (мэдээж хувьсагчгүйгээр) харьцуулж үзвэл нэг хашилттай мөр илүү хурдан боловсруулагдах нь дамжиггүй.

Тооцоолол

Би ProfiPHP вэбсайтаас энэ сэдвээр сонирхолтой тооцоо олсон. Зохиолч энгийн скрипт бичсэн бөгөөд үүгээрээ мөрийг боловсруулах хугацааг тооцоолсон.

© 2024 ermake.ru -- Компьютер засварын тухай - Мэдээллийн портал