Blade кэширует возвращаемую строку вашей пользовательской директивы, но если эта строка является PHP-кодом, она будет оценена при доступе к кэшированному представлению. Что вы можете сделать, это включить всю условную логику в возвращаемую строку, например:
\Blade::directive('signup_done', function () {
return "<?php if (\Auth::check() && \Auth::user()->signup_done) { ?>";
});
Возможно, это не лучшее решение, но оно должно работать.
Это - operator< < это перегружается для const void*
и для const char*
. Ваш массив символов преобразовывается в const char*
и передается той перегрузке, потому что это соответствует лучше, чем к const void*
. Международный массив, однако, преобразовывается в const void*
и передается той версии. Версия operator< < взятие const void*
просто производит адрес. Версия, берущая const char*
на самом деле обработки это как струна до и выводы каждый символ до завершающегося нулевого символа. Если Вы не хотите это, преобразуйте свой массив символов в const void*
явно при передаче его operator< <:
cout << static_cast<const void*>(arr2) << endl;
Поскольку cout's operator <<
перегружается для char*
к выходным строкам, и arr2
соответствия это.
, Если Вы хотите адрес, попытайтесь снять символьный массив в качестве пустого указателя.
Существует стандартная перегрузка для символа*, что выводы NUL завершили строку.
В то время как бросок является, вероятно, более значимым подходом, Вы могли также использовать addressof оператор:
cout << &arr2 << endl;