Как преобразовать значение переменной PHP в строку?
Я искал что-то лучшее, чем конкатенирование с пустой строкой:
$myText = $myVar . '';
Как метод ToString()
в Java или .NET.
Как преобразовать значение переменной PHP в строку?
Я искал что-то лучшее, чем конкатенирование с пустой строкой:
$myText = $myVar . '';
Как метод ToString()
в Java или .NET.
Вы можете использовать операторы кастинга:
$myText = (string)$myVar;
В разделе Strings руководства по PHP содержится более подробная информация о строчном кастинге и преобразовании, включая специальную обработку для булевых и нулевых значений.
Это делается с помощью typecasting:
$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);
Используйте print_r:
$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);
Вы можете использовать typecasting:
$var = (string)$varname;
или StringValue:
$var = strval($varname);
или SetType:
$success = settype($varname, 'string');
// $varname itself becomes a string
Все они работают одинаково с точки зрения типа-жонглирования.
Как преобразовать значение PHP переменная в строку?
Значение может быть преобразовано в строку с помощью (string) cast или strval(). (Изменить: как указано Thomas).
Он также должен автоматически забрасываться для вас, когда вы используете его как строку.
Вы ищете strval:
string strval ( mixed $var )
Получить строковое значение переменной. См. Документацию по строке для Дополнительная информация о конвертации в строка.
Эта функция не выполняет форматирование по возвращаемому значению. Если ты поиск способа форматирования числового значение как строку, см. sprintf() или number_format().
Для примитивов просто используйте (string)$var
или распечатайте эту переменную сразу. PHP - это динамически типизированный язык, а переменная будет передана в строку на лету.
Если вы хотите преобразовать объекты в строки, вам нужно определить метод __toString()
, который возвращает строку. Этот метод запрещен для исключения.
Ввод в двойные кавычки должен работать:
$myText = "$myVar";
Я думаю, что стоит упомянуть, что вы можете перехватить любой вывод (например, print_r
, var_dump
) в переменной, используя буферизацию вывода:
<?php
ob_start();
var_dump($someVar);
$result = ob_get_clean();
?>
Другой вариант - использовать встроенную функцию settype:
<?php
$foo = "5bar"; // string
$bar = true; // boolean
settype($foo, "integer"); // $foo is now 5 (integer)
settype($bar, "string"); // $bar is now "1" (string)
?>
Это фактически выполняет преобразование переменной, отличной от typecasting, и позволяет вам иметь общий способ преобразования в несколько типов.
В дополнение к ответу Томаса Дж. Мэйфилда:
Если вы следуете ссылке на руководство по литью строк, есть специальный случай, который очень важно понять:
(string) cast предпочтительнее, особенно если ваша переменная $a является объектом, потому что PHP будет следовать протоколу в соответствии с его объектной модели, вызвав магический метод __ toString() (если такой определяется в классе, из которого создается экземпляр $a).
PHP делает что-то похожее на
function castToString($instance)
{
if (is_object($instance) && method_exists($instance, '__toString')) {
return call_user_func_array(array($instance, '__toString'));
}
}
Операция (string) casting является рекомендуемым методом для программирования PHP5 +, создающего код более Object-Oriented. IMO это хороший пример сходства (разницы) дизайна с другими языками ООП, такими как Java/С#/и т.д., То есть в своем собственном специальном PHP-способе (когда это подходит или полезно).
Как уже упоминали другие, объектам нужен __toString
для приведения к строке. Объект, который не определяет этот метод, все еще может создать строковое представление, используя функцию spl_object_hash.
Эта функция возвращает уникальный идентификатор для объекта. Этот идентификатор может использоваться в качестве хэш-ключа для хранения объектов или для идентификации объекта, если объект не уничтожен. Как только объект уничтожен, его хэш может быть повторно использован для других объектов.
У меня есть базовый класс Object с методом __toString
который по умолчанию вызывает md5(spl_object_hash($this))
чтобы сделать вывод явно уникальным, поскольку вывод из spl_object_hash может выглядеть очень похожим между объектами.
Это особенно полезно для отладки кода, где переменная инициализируется как объект, а затем в коде предполагается, что она изменилась на другой объект. Простое отображение переменных в журнале может показать изменение из хеша объекта (или нет).
Некоторые, если не все, методы в предыдущих ответах терпят неудачу, когда предполагаемая строковая переменная имеет начальный ноль, например, 077543.
Попытка преобразовать такую переменную не может получить намеченную строку, потому что переменная преобразуется в основание 8 (восьмеричное).
Все это даст $str
значение 32611:
$no = 077543
$str = (string)$no;
$str = "$no";
$str = print_r($no,true);
$str = strval($no);
$str = settype($no, "integer");
В документации говорится, что вы также можете:
$str = "$foo";
Это то же самое, что и приведение, но я думаю, что он выглядит красивее.
Источник:
Я думаю, что этот вопрос немного вводит в заблуждение, поскольку toString() в Java - это не просто способ привести что-либо к String. Это то, что делает приведение через (string) или String.valueOf(), и это работает также в PHP.
// Java
String myText = (string) myVar;
// PHP
$myText = (string) $myVar;
Обратите внимание, что это может быть проблематично, поскольку Java является типобезопасной (более подробную информацию см. Здесь).
Но, как я уже сказал, это приведение и, следовательно, не эквивалент Java toString().
toString в Java не просто приводит объект к строке. Вместо этого он даст вам представление String. И это то, что делает __toString() в 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'
Что я имею в виду под "представлением String"? Представьте себе класс для библиотеки с миллионами книг.
Это оба правильные подходы, но с совершенно разными целями, ни одно из них не является идеальным решением для каждого случая, и вам нужно выбирать мудро, который лучше соответствует вашим потребностям.
Конечно, есть еще больше вариантов:
$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
Все эти методы будут возвращать строку, некоторые из них будут использовать внутреннюю __toString, а некоторые другие не будут работать с объектами. Посмотрите на документацию PHP для более подробной информации.
Вы всегда можете создать метод с именем .ToString($ in), который возвращает
$in . '';
Если вы конвертируете ничего, кроме простых типов, таких как целые или логические, вам нужно написать свою собственную функцию/метод для типа, который вы пытаетесь преобразовать, иначе PHP просто напечатает тип (например, массив, GoogleSniffer или Bidet).
PHP динамически типизирован, так что, как сказал Крис Фурнье, "если вы используете его, как строку, он становится строкой". Если вы ищете больше контроля над форматом строки, то printf - ваш ответ.
Двойные кавычки тоже должны работать... он должен создать строку, тогда она должна ПРИНЯТЬ/ВСТАВИТЬ значение броузера STRING из $myVar между двумя пустыми строками.
Вы также можете использовать PHP-функцию var_export.
$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) . "'";
Для объектов вы не сможете использовать оператор трансляции. Вместо этого я использую метод json_encode()
.
Например, следующее выводит содержимое в журнал ошибок:
error_log(json_encode($args));
Попробуйте этот немного странный, но работающий подход для преобразования текстовой части stdClass в строковый тип:
$my_std_obj_result = $SomeResponse->return->data; // Specific to object/implementation
$my_string_result = implode ((array)$my_std_obj_result); // Do conversion
Я использую variableToString. Он обрабатывает каждый тип PHP и является гибким (вы можете расширить его, если хотите).