Как преобразовать значение переменной PHP в строку?
Я искал что-то получше, чем объединение с пустой строкой:
$myText = $myVar . '';
Как метод ToString() в Java или .NET.
Я бы использовал json_encode($myText). Я обнаружил, что предлагаемые решения print_r и (string)var хорошо работают для скалярных значений и простых объектов. Для сложных переменных, классов или объектов, если полный __toString() не определен, я предпочитаю вышеупомянутый json_encode.






Помещение его в двойные кавычки должно работать:
$myText = "$myVar";
Это работает, но я не знаю, является ли это стандартным способом сделать это в PHP.
Это очень стандартный способ сделать это в трепать
Этот метод будет работать, если $ myVar является объектом класса с __toString или скалярным типом. В других случаях выдает ошибку.
Вы всегда можете создать метод с именем .ToString ($ in), который возвращает
$in . '';
How do I convert the value of a PHP variable to string?
Значение можно преобразовать в строку с помощью функции (строка) приведение или strval (). (Обновлено: как также заявил Томас).
Он также должен быть автоматически приведен для вас, когда вы используете его как строку.
Вы можете использовать операторы приведения:
$myText = (string)$myVar;
Более подробная информация о приведении и преобразовании строк содержится в Раздел струнных руководства по PHP, включая специальную обработку для логических и нулевых значений.
Object of class Foo could not be converted to string. Есть ли общие решения, которые могут преобразовать что угодно (массивы + объекты + что угодно) в строку?
Это ответ - stackoverflow.com/questions/28098/php-tostring-equivalent/…
Примечание: при использовании с массивами появится уведомление PHP.
@MarkAmery Он дал ответ, который неявно называет __toString() «Волшебным методом», но не упомянул об этом вообще. Пользователь запросил ответ, похожий на метод Java toString(), а в PHP это функция __toString().
@Supuhstar Возможно, вы не согласны, но, учитывая остальную часть содержания вопроса, я думаю, что гораздо более вероятно, что под 'like tostring ()' спрашивающий имел в виду «наиболее идиоматический способ преобразования чего-либо в строку», а не « способ преобразования объекта в строку специально с помощью метода этого объекта ". Конечно, согласно второй интерпретации правильный ответ - __toString(), но согласно предыдущей интерпретации (которая, я думаю, более разумна), это определенно либо приведение, либо strval() - вы, очевидно, не можете использовать __toString для не-объекта, такого как целое число. , так как у них его нет.
Я должен сказать, что вы оба правы. Судя по голосам за этот комментарий и другого лидера (который позже был отредактирован, чтобы включить мой ответ и теперь является наиболее правильным), люди с обоими вопросами (переопределение __toString () и приведение строк) приходят к этому сообщению за ответом. . Я некоторое время обсуждал вопрос об удалении этого ответа, но он по-прежнему получает несколько голосов каждую неделю, поэтому очевидно, что это то, чего хотят некоторые посетители.
@MarkAmery Я как бы имел в виду, что если вы хотите указать, как выглядит строковая версия вашего объекта, вам нужно будет указать метод __toString(). @ ThomasG.Mayfield не помешает отредактировать и добавить этот факт.
@Supuhstar Ах да, я наконец понял, откуда ты. Извини, если раньше я был тупым. Я согласен с тем, что это важная деталь, и было бы полезно добавить ее, возможно, разделив ответ на разделы «Преобразование примитивов» и «Преобразование объектов» с заголовками.
или просто сделайте это ''. $ yourvariable. ''
Если вы конвертируете что-либо, кроме простых типов, таких как целые числа или логические значения, вам нужно будет написать свою собственную функцию / метод для типа, который вы пытаетесь преобразовать, иначе PHP просто распечатает тип (например, массив, GoogleSniffer , или Биде).
PHP имеет динамическую типизацию, поэтому, как сказал Крис Фурнье: «Если вы используете его как строку, она становится строкой». Если вам нужен больший контроль над форматом строки, то printf - ваш ответ.
Это делается с помощью приведения типов:
$strvar = (string) $var; // Casts to string
echo $var; // Will cast to string implicitly
var_dump($var); // Will show the true type of the variable
В классе вы можете определить, что выводится, используя магический метод __toString. Пример ниже:
class Bottles {
public function __toString()
{
return 'Ninety nine green bottles';
}
}
$ex = new Bottles;
var_dump($ex, (string) $ex);
// Returns: instance of Bottles and "Ninety nine green bottles"
Еще несколько примеров приведения типов:
$i = 1;
// int 1
var_dump((int) $i);
// bool true
var_dump((bool) $i);
// string "1"
var_dump((string) 1);
Для примитивов просто используйте (string)$var или сразу распечатайте эту переменную. PHP - это язык с динамической типизацией, и переменная будет преобразована в строку на лету.
Если вы хотите преобразовать объекты в строки, вам нужно будет определить метод __toString(), который возвращает строку. В этом методе запрещено генерировать исключения.
Вы ищете Strval:
string strval ( mixed $var )Get the string value of a variable. See the documentation on string for more information on converting to string.
This function performs no formatting on the returned value. If you are looking for a way to format a numeric value as a string, please see sprintf() or number_format().
На самом деле это очень полезно, потому что я хотел преобразовать все числа в строки без использования настраиваемого обратного вызова. $strings = array_map('strval', $my_numbers);
Это единственный ответ, который работает с array_map и строковыми вызываемыми объектами в целом.
Вы можете использовать приведение типов:
$var = (string)$varname;
или StringValue:
$var = strval($varname);
или SetType:
$success = settype($varname, 'string');
// $varname itself becomes a string
Все они работают для одного и того же с точки зрения жонглирования шрифтами.
strval ($ varname) помогает мне, особенно когда значение возвращается как тип "вариант" и его нужно преобразовать в строку или int.
strval() - это то, что я искал, потому что хотел использовать его с array_walk. Например. $array = array('cat',$object); array_walk($array,'strval'); // $array = array('cat',$object->__toString)
$myText = print_r($myVar,true);
Вы также можете использовать это как:
$myText = print_r($myVar,true)."foo bar";
Это установит $myText в строку, например:
array (
0 => '11',
)foo bar
Используйте var_export, чтобы получить немного больше информации (с типами переменных, ...):
$myText = var_export($myVar,true);
«когда возвращаемый параметр - ИСТИНА, [print_r] вернет строку». Поскольку print_r - хороший способ распечатать объекты, массивы (а также числа / строки), это хороший способ преобразовать объект в удобочитаемую строку.
К вашему сведению, новички, часть true очень важна! Я попробовал несколько методов преобразования строк, включая print_r, и был разочарован каждым из них, а затем обнаружил параметр true (прочтите документацию, чтобы узнать, почему он работает).
Другой вариант - использовать встроенную функцию settype:
<?php
$foo = "5bar"; // string
$bar = true; // boolean
settype($foo, "integer"); // $foo is now 5 (integer)
settype($bar, "string"); // $bar is now "1" (string)
?>
Это фактически выполняет преобразование переменной, в отличие от преобразования типов, и позволяет вам иметь общий способ преобразования в несколько типов.
Двойные кавычки тоже должны работать ... он должен создать строку, затем он должен ДОБАВИТЬ / ВСТАВИТЬ приведенное значение СТРОКИ $ myVar между двумя пустыми строками.
В дополнение к ответу Томаса Г. Мэйфилда:
Если вы перейдете по ссылке на руководство по кастингу струн, это особый случай, который очень важно понять:
(строковое) приведение предпочтительнее, особенно если ваша переменная $ а является объектом, потому что PHP будет следовать приведению протокол в соответствии со своей объектной моделью, вызывая магический метод __нанизывать() (если он определен в классе, из которого создается экземпляр $ a).
PHP делает что-то похожее на
function castToString($instance)
{
if (is_object($instance) && method_exists($instance, '__toString')) {
return call_user_func_array(array($instance, '__toString'));
}
}
Операция приведения (нить) является рекомендуемой техникой для программирования PHP5 +, делающей код более объектно-ориентированным. ИМО, это хороший пример сходства (различия) дизайна с другими языками ООП, такими как Java / C# / и т. д., То есть своим собственным особенным способом PHP (всякий раз, когда это хорошо или полезно).
Для объектов вы не сможете использовать оператор приведения. Вместо этого я использую метод json_encode().
Например, следующее будет выводить содержимое в журнал ошибок:
error_log(json_encode($args));
В документации сказано, что вы также можете:
$str = "$foo";
Он такой же, как и гипс, но выглядит красивее.
Источник:
Попробуйте этот немного странный, но работающий подход для преобразования текстовой части stdClass в строковый тип:
$my_std_obj_result = $SomeResponse->return->data; // Specific to object/implementation
$my_string_result = implode ((array)$my_std_obj_result); // Do conversion
Я думаю, стоит упомянуть, что вы можете поймать любой вывод (например, print_r, var_dump) в переменной, используя буферизацию вывода:
<?php
ob_start();
var_dump($someVar);
$result = ob_get_clean();
?>
Благодаря: Как я могу записать результат var_dump в строку?
Стоит отметить, что вам это не нужно с print_r. Просто используйте переопределение для возврата в виде строки.
Лучше использовать $result = var_export($someVar, true) без ob.
Некоторые, если не все, методы в предыдущих ответах не работают, когда предполагаемая строковая переменная имеет ведущий ноль, например, 077543.
Попытка преобразовать такую переменную не дает желаемой строки, потому что переменная преобразуется в основание 8 (восьмеричное).
Все это заставит $str иметь значение 32611:
$no = 077543
$str = (string)$no;
$str = "$no";
$str = print_r($no,true);
$str = strval($no);
$str = settype($no, "integer");
Это PICNIC (проблема в кресле, а не в компьютере) как здесь ничего не подводит! print 077543; выводит 32611, так что это правильное строковое значение $no. Никто не ожидает, что (string)+1 вернет строку +1 (он правильно возвращает 1) или что $no = 1+1; print (string)$no; выдаст 1+1. Примечания: (1) То же самое и для шестнадцатеричного ($no=0xff;). (2) Вы можете вернуть восьмеричное значение с помощью '0'.decoct($no); (3) $no = "077543"; сохраняет ведущее значение 0, «077543» + 1` дает 77544, а 077543+1 (правильно) дает 32612. (PS: не проголосовали против, так как эта ошибка является обычным явлением)
Вы также можете использовать PHP-функцию var_export.
Я использую variableToString. Он обрабатывает все типы PHP и является гибким (вы можете расширить его, если хотите).
$parent_category_name = "new clothes & shoes";
// To make it to string option one
$parent_category = strval($parent_category_name);
// Or make it a string by concatenating it with 'new clothes & shoes'
// It is useful for database queries
$parent_category = "'" . strval($parent_category_name) . "'";
Проголосовали против, так как я понятия не имею, что вы хотите нам сказать. Использование strval() на струнах - пустая трата времени.
чувак, дело в том, что вы получили строковое значение = при повторном представлении оно будет "строкой". Но если вы хотите отобразить это в javascript, вам нужно сделать его 'stringx'
Как уже упоминалось, объектам нужен метод __toString для преобразования в строку. Объект, который не определяет этот метод, по-прежнему может создавать строковое представление с помощью функции spl_object_hash.
This function returns a unique identifier for the object. This id can be used as a hash key for storing objects, or for identifying an object, as long as the object is not destroyed. Once the object is destroyed, its hash may be reused for other objects.
У меня есть базовый класс Object с методом __toString, который по умолчанию вызывает md5(spl_object_hash($this)), чтобы сделать вывод явно уникальным, поскольку вывод spl_object_hash может выглядеть очень похожим между объектами.
Это особенно полезно для отладки кода, когда переменная инициализируется как объект, а позже в коде предполагается, что она изменилась на другой объект. Простое отображение переменных в журнале может выявить изменение хэша объекта (или нет).
Я думаю, что этот вопрос вводит в заблуждение, поскольку toString () в Java - это не просто способ преобразовать что-либо в String. Это то, что делает Кастинг via (string) или String.valueOf (), и это также работает в PHP.
// Java
String myText = (string) myVar;
// PHP
$myText = (string) $myVar;
Обратите внимание, что это может быть проблематично, поскольку Java является типобезопасной (см. здесь для более подробной информации).
Но, как я уже сказал, это кастинг и, следовательно, не эквивалент Java toString ().
toString в Java не просто приводит объект к String. Вместо этого он даст вам строковое представление. И это то, что делает __нанизывать() в PHP.
// Java
class SomeClass{
public String toString(){
return "some string representation";
}
}
// PHP
class SomeClass{
public function __toString()
{
return "some string representation";
}
}
А с другой стороны:
// Java
new SomeClass().toString(); // "Some string representation"
// PHP
strval(new SomeClass); // "Some string representation"
Что я имею в виду под «предоставлением строкового представления»? Представьте себе класс библиотеки с миллионами книг.
Оба эти подхода допустимы, но преследуют совершенно разные цели, и ни один из них не является идеальным решением для каждого случая, и вы должны с умом выбрать тот, который лучше подходит для ваших нужд.
Конечно, вариантов еще больше:
$no = 421337 // A number in PHP
$str = "$no"; // In PHP, stuff inside "" is calculated and variables are replaced
$str = print_r($no, true); // Same as String.format();
$str = settype($no, 'string'); // Sets $no to the String Type
$str = strval($no); // Get the string value of $no
$str = $no . ''; // As you said concatenate an empty string works too
Все эти методы возвращают String, некоторые из них используют __toString внутри, а некоторые другие не работают с объектами. Взгляните на Документация PHP для получения более подробной информации.
__toString метод или (строка) приведение
$string=(string)$variable; //force make string
вы можете рассматривать объект как строку
class Foo
{
public function __toString()
{
return "foo";
}
}
echo new Foo(); //foo
Кроме того, есть еще один трюк, я предполагаю, что у меня есть переменная типа int, я хочу сделать строку это
$string=''.$intvariable;
Кажется, это правильный ответ: stackoverflow.com/a/3559247/11236 (
print_r(foo, true))!