Как провести различие между «некоторым текстом» и «некоторым текстом»? - PullRequest
0 голосов
/ 29 января 2011

Если у меня есть две переменные:

$v1 = "some text";
$v2 = 'some test';

Можно ли узнать, какая строковая переменная была определена с помощью одинарных кавычек, а какая с помощью двойных кавычек?

Ответы [ 5 ]

4 голосов
/ 29 января 2011

Нет. И вам не нужно заботиться.

1 голос
/ 29 января 2011

Эммы. Если ваша задача состояла в том, чтобы выяснить это с помощью статического анализа, а не анализа во время выполнения (что невозможно), вам, вероятно, следует использовать Tokenizer и проанализировать поток токенов файла и посмотреть, подходит ли соответствующий T_VARIABLE присваивается '"' или T_CONSTANT_ENCAPSED_STRING. Первое произойдет, если переменная интерполируется, второе, если это не так. Если вы хотите различать " и ', а не между интерполированным / не интерполированным, вы должны проверить первый символ T_CONSTANT_ENCAPSED_STRING против ' и ".

Хотя я очень уверен, что никто не хотел знать это в интервью. Токенизатор - это действительно классная штука, о которой редко кто-то знает, это не будет в стандартном интервью;)

1 голос
/ 29 января 2011

Нет способа сделать это, и нет смысла пытаться это выяснить.

А как насчет строк, прочитанных из файла или пользовательского ввода? Как насчет строки в двойных кавычках, добавляемой к строке в одинарных кавычках? Какой стиль цитирования будет результатом? Какие кавычки окружают целое число, когда оно приводится к строке?

1 голос
/ 29 января 2011

Нет, сделать это невозможно. Как только строка назначена, все готово, вы не сможете проверить это позже.


Однако, если вы действительнодействительно очень хочется, у вас может быть массив, в котором хранится информация о назначении строки, но вы должны обновить этот массив самостоятельно.Например:

$v1 = "some text";
$info['v1'] = true;
$v2 = 'some test';
$info['v2'] = false;

Здесь вы можете позже проверить значение массива $ info.Если это правда, вы сделали это двойной кавычкой, в противном случае одинарной кавычкой. Однако, я не могу понять это на практике.Это абсолютно бесполезно.

0 голосов
/ 29 января 2011

Вы не можете видеть, какая строка была создана с каким литералом.Но есть некоторые различия в интерпретации литералов:

http://dev.fyicenter.com/faq/php/php_string_operation.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...