В чем разница между этими двумя строками в массиве PHP? - PullRequest
0 голосов
/ 29 декабря 2011

Это проблема, с которой я сталкиваюсь в теме drupal, но проблема, похоже, в некоторой эзотерической проблеме PHP, поэтому я подумал, что попытаюсь найти ответ здесь.

$ vars [Массив theme_hook_suggestions используется для поиска файлов шаблонов.Прямо сейчас он находит шаблон, если я жестко кодирую то же значение, которое, по-видимому, уже существует.

Логически кажется, что один и тот же вход должен == иметь одинаковый вывод, поэтому я чувствую, что входные данные должны быть как-то различны между двумя, еслиодин находит шаблон, а другой нет.

Так в чем же может быть разница между двумя строками 'page__gallery', которые я добавляю в этот массив?Я попытался восстановить строку, разделив ее и перекомпоновав.Я попытался сделать сравнение кодировки между целыми строками и каждым символом в строке.В любом случае они выглядят одинаково, но это работает только в том случае, если я набираю его вручную.

$str2 = 'page__gallery';
$vars['theme_hook_suggestions'][] = $str2; // if I comment this line out, it doesn't find the template.
print $str2; //output is page__gallery

$str1 = $vars['theme_hook_suggestions'][3];
$vars['theme_hook_suggestions'][] = $str1; // if I comment this line out, it finds the template still.
print $str1; //output is page__gallery

print $str1 == $str2; // 1
print $str1 === $str2; // 1
var_dump($str1) // Outputs: string(13) "page__gallery"
var_dump($str2) // Outputs: string(13) "page__gallery"

var_dump из $vars['theme_hook_suggestions'] с жестко заданным строковым значением:

array(6) { [0]=> string(10) "page__node" [1]=> string(13) "page__node__%" [2]=> string(14) "page__node__96" [3]=> string(13) "page__gallery" [4]=> string(20) "page__drisco_gallery" [5]=> string(13) "page__gallery" }

var_dump из$vars['theme_hook_suggestions'] с той же строкой, что уже существует, повторно добавлено:

array(6) { [0]=> string(10) "page__node" [1]=> string(13) "page__node__%" [2]=> string(14) "page__node__96" [3]=> string(13) "page__gallery" [4]=> string(20) "page__drisco_gallery" [5]=> string(13) "page__gallery" }

Первый работает, второй нет.

Справка!

1 Ответ

0 голосов
/ 29 декабря 2011

print возвращает 1 всегда http://php.net/manual/en/function.print.php

Таким образом, эта строка не проверяется правильно

print $str1 === $str2; // 1

Как и рекомендуется, var_dump () - лучший выбор.

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