Подтвердить что ты не робот

PHP эквивалент.NET/Java toString()

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

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

$myText = $myVar . '';

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

4b9b3361

Ответ 1

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

$myText = (string)$myVar;

В разделе Strings руководства по PHP содержится более подробная информация о строчном кастинге и преобразовании, включая специальную обработку для булевых и нулевых значений.

Ответ 2

Это делается с помощью 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);

Ответ 3

Используйте 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);

Ответ 4

Вы можете использовать typecasting:

$var = (string)$varname;

или StringValue:

$var = strval($varname);

или SetType:

$success = settype($varname, 'string');
// $varname itself becomes a string

Все они работают одинаково с точки зрения типа-жонглирования.

Ответ 5

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

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

Он также должен автоматически забрасываться для вас, когда вы используете его как строку.

Ответ 6

Вы ищете strval:

string strval ( mixed $var )

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

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

Ответ 7

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

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

Ответ 8

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

$myText = "$myVar";

Ответ 9

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

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

Спасибо: Как я могу записать результат var_dump в строку?

Ответ 10

Другой вариант - использовать встроенную функцию 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, и позволяет вам иметь общий способ преобразования в несколько типов.

Ответ 11

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

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

(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-способе (когда это подходит или полезно).

Ответ 12

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

Эта функция возвращает уникальный идентификатор для объекта. Этот идентификатор может использоваться в качестве хэш-ключа для хранения объектов или для идентификации объекта, если объект не уничтожен. Как только объект уничтожен, его хэш может быть повторно использован для других объектов.

У меня есть базовый класс Object с методом __toString который по умолчанию вызывает md5(spl_object_hash($this)) чтобы сделать вывод явно уникальным, поскольку вывод из spl_object_hash может выглядеть очень похожим между объектами.

Это особенно полезно для отладки кода, где переменная инициализируется как объект, а затем в коде предполагается, что она изменилась на другой объект. Простое отображение переменных в журнале может показать изменение из хеша объекта (или нет).

Ответ 13

Некоторые, если не все, методы в предыдущих ответах терпят неудачу, когда предполагаемая строковая переменная имеет начальный ноль, например, 077543.

Попытка преобразовать такую переменную не может получить намеченную строку, потому что переменная преобразуется в основание 8 (восьмеричное).

Все это даст $str значение 32611:

$no = 077543
$str = (string)$no;
$str = "$no";
$str = print_r($no,true);
$str = strval($no);
$str = settype($no, "integer");

Ответ 14

В документации говорится, что вы также можете:

$str = "$foo";

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

Источник:

Ответ 15

Я думаю, что этот вопрос немного вводит в заблуждение, поскольку 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"? Представьте себе класс для библиотеки с миллионами книг.

  • Преобразование этого класса в строку (по умолчанию) преобразует данные, здесь все книги, в строку, поэтому строка будет очень длинной и в большинстве случаев тоже не очень полезной.
  • Вместо String вы получите представление 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 для более подробной информации.

Ответ 16

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

$in . '';  

Ответ 17

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

Ответ 18

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

Ответ 19

Двойные кавычки тоже должны работать... он должен создать строку, тогда она должна ПРИНЯТЬ/ВСТАВИТЬ значение броузера STRING из $myVar между двумя пустыми строками.

Ответ 20

Вы также можете использовать PHP-функцию var_export.

Ответ 21

$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) . "'";

Ответ 22

Для объектов вы не сможете использовать оператор трансляции. Вместо этого я использую метод json_encode().

Например, следующее выводит содержимое в журнал ошибок:

error_log(json_encode($args));

Ответ 23

Попробуйте этот немного странный, но работающий подход для преобразования текстовой части stdClass в строковый тип:

$my_std_obj_result = $SomeResponse->return->data; // Specific to object/implementation

$my_string_result = implode ((array)$my_std_obj_result); // Do conversion

Ответ 24

Я использую variableToString. Он обрабатывает каждый тип PHP и является гибким (вы можете расширить его, если хотите).