Эквивалент ToString() в PHP

Как преобразовать значение переменной PHP в строку?

Я искал что-то лучше, чем конкатенация с пустой строкой:

$myText = $myVar . '';

Как ToString() метод в Java или .Сеть.

23 ответов


можно использовать операторы литья:

$myText = (string)$myVar;

более подробная информация о литье и преобразовании строк содержится в раздел строки руководства 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 переменной в строку?

значение может быть преобразовано в строку с помощью (строка) cast или strval()


вы ищете strval:

string strval ( mixed $var )

получить строковое значение переменной. См. документацию по string для дополнительная информация о преобразовании в строка.

эта функция не выполняет форматирование о возвращаемом значении. Если ты ... поиск способа форматирования числового значение как строка, см. функции sprintf() или number_format().


для примитивов просто использовать (string)$var или сразу же распечатайте эту переменную. PHP является динамически типизированным языком, и переменная будет кастироваться в строку на лету.

Если вы хотите преобразовать объекты в строки необходимо определить __toString() метод, который возвращает строку. Этот метод запрещен для создания исключений.


положить его в двойные кавычки должны работать:

$myText = "$myVar";

Я думаю, стоит упомянуть, что вы можете поймать любой выход (например,print_r, var_dump) в переменной с помощью буферизации вывода:

<?php
ob_start();
var_dump($someVar);
$result = ob_get_clean();
?>

спасибо: https://stackoverflow.com/a/139491/987864


другой вариант-использовать встроенный в settype:

<?php
$foo = "5bar"; // string
$bar = true;   // boolean

settype($foo, "integer"); // $foo is now 5   (integer)
settype($bar, "string");  // $bar is now "1" (string)
?>

это фактически выполняет преобразование переменной в отличие от типизации и позволяет вам иметь общий способ преобразования в несколько типов.


в дополнение к ответу, данному Томасом г. Мэйфилдом:

Если вы перейдете по ссылке на руководство по кастингу строк, есть особый случай, который очень важно понять:

(string) cast предпочтительнее, особенно если ваша переменная $a является объектом, потому что PHP будет следовать кастингу протокол в соответствии с его объектной моделью, вызвав __toString () magic method (если таковой определен в классе, из которого $a экземпляр из).

PHP делает что-то похожее на

function castToString($instance) 
{ 
    if (is_object($instance) && method_exists($instance, '__toString')) {
        return call_user_func_array(array($instance, '__toString'));
    }
}

на (строка) деятельность отливки порекомендованный метод для программирования PHP5+ делая код более объектно-ориентированным. IMO это хороший пример сходства дизайна (разницы) с другими языками ООП, такими как Java/C#/etc., то есть по-своему особым способом PHP (когда это хорошо или стоит).


как уже упоминалось, объекты нужен __toString метод для приведения к строке. Объект, который не определяет этот метод, может по-прежнему создавать строковое представление с помощью spl_object_hash


некоторые, если не все методы выше терпят неудачу, когда предполагаемая строковая переменная имеет начальный ноль ie 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";

это то же самое, что и в ролях, но я думаю, что это выглядит красивее.

источник:


двойные кавычки тоже должны работать... он должен создать строку, а затем добавить/вставить приведенное строковое значение $myVar между 2 пустыми строками.


вы всегда можете создать метод с именем .ToString ($in), который возвращает

$in . '';  

Если вы конвертируете что-либо, кроме простых типов, таких как целые числа или логические значения, вам нужно будет написать свою собственную функцию/метод для типа, который вы пытаетесь преобразовать, иначе PHP просто напечатает тип (например, array, GoogleSniffer или Bidet).


PHP динамически типизирован, поэтому, как сказал Крис Фурнье: "если вы используете его как строку, он становится строкой". Если вы ищете больше контроля над форматом строки, то printf ваш ответ.


вы можете использовать также, var_export функция php.


$parent_category_name = "new clothes & shoes" ;
//TO make it to string option one
$parent_category = strval($parent_category_name);
//Or make it string my concatenating it with 'new clothes & shoes' 
//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

https://github.com/lingtalfi/VariableToString

он обрабатывает каждый тип php и является гибким (вы можете расширить его, если хотите)