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

php string

1461553 просмотра

24 ответа

6776 Репутация автора

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

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

$myText = $myVar . '';

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

Автор: Antoine Aubry Источник Размещён: 26.08.2008 01:56

Ответы (24)


15 плюса

91710 Репутация автора

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

$myText = "$myVar";
Автор: Mark Biek Размещён: 26.08.2008 01:58

1 плюс

307359 Репутация автора

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

$in . '';  
Автор: Joel Coehoorn Размещён: 26.08.2008 01:59

32 плюса

5654 Репутация автора

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

Значение может быть преобразовано в строку, используя приведение (string) или функцию strval () . (Правка: как сказал и Томас ).

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

Автор: Chris Размещён: 26.08.2008 02:00

754 плюса

5811 Репутация автора

Решение

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

$myText = (string)$myVar;

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

Автор: Thomas G. Mayfield Размещён: 26.08.2008 02:01

1 плюс

14220 Репутация автора

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

Автор: Brian Warshaw Размещён: 26.08.2008 02:03

1 плюс

50180 Репутация автора

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

Автор: Allain Lalonde Размещён: 26.08.2008 02:04

296 плюса

29285 Репутация автора

Это делается с помощью 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);
Автор: Ross Размещён: 26.08.2008 02:11

17 плюса

11222 Репутация автора

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

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

Автор: Michał Rudnicki Размещён: 26.08.2008 02:15

26 плюса

26486 Репутация автора

Вы ищете strval :

string strval ( mixed $var )

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

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

Автор: opensas Размещён: 20.12.2009 03:24

57 плюса

579 Репутация автора

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

$var = (string)$varname;

или StringValue:

$var = strval($varname);

или SetType:

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

Все они работают на одну и ту же вещь с точки зрения Type-Juggling.

Автор: Joel Larson Размещён: 02.01.2010 08:51

121 плюса

2794 Репутация автора

Используйте 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);
Автор: Cedric Размещён: 24.08.2010 05:31

7 плюса

320 Репутация автора

Другой вариант - использовать встроенную функцию settype :

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

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

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

Автор: Justin Weeks Размещён: 07.03.2011 12:38

1 плюс

1510 Репутация автора

Двойные кавычки тоже должны работать ... он должен создавать строку, затем он ДОБАВЛЯЕТ / ВСТАВЛЯЕТ приведенное значение STRING $ myVar между 2 пустыми строками.

Автор: Flak DiNenno Размещён: 31.07.2011 06:25

7 плюса

9005 Репутация автора

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

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

(string) приведение предпочтительнее, особенно если ваша переменная $ a является объектом, потому что PHP будет следовать протоколу приведения в соответствии со своей объектной моделью, вызывая магический метод __toString () (если таковой определен в классе, из которого создается экземпляр $ 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 # / и т. Д., Т. Е. С его собственным особым способом PHP (всякий раз, когда это хорошо или стоит).

Автор: Yauhen Yakimovich Размещён: 06.05.2012 06:28

0 плюса

9973 Репутация автора

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

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

error_log(json_encode($args));
Автор: Archimedes Trajano Размещён: 03.04.2013 05:44

3 плюса

38 Репутация автора

В документации сказано, что вы также можете сделать:

$str = "$foo";

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

Источник:

Автор: DarthKotik Размещён: 15.11.2013 10:45

0 плюса

954 Репутация автора

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

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

$my_string_result = implode ((array)$my_std_obj_result); //do conversion
Автор: mikikg Размещён: 25.02.2014 02:09

9 плюса

4039 Репутация автора

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

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

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

Автор: Daan Размещён: 25.02.2014 11:28

4 плюса

1326 Репутация автора

Некоторые, если не все, перечисленные выше методы завершаются сбоем, когда предполагаемая строковая переменная имеет начальный ноль, т. Е. 077543 , попытка преобразовать такую ​​переменную не может получить намеченную строку, поскольку переменная преобразуется в основание 8 (восьмеричное) .

Все это будет $strиметь значение 32611

$no = 077543  
$str = (string)$no;   
$str = "$no";   
$str = print_r($no,true);  
$str = strval($no);   
$str = settype($no, "integer");  
Автор: user1587439 Размещён: 19.05.2014 08:09

1 плюс

170 Репутация автора

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

Автор: Aby W Размещён: 11.08.2015 01:06

-1 плюса

3685 Репутация автора

Я использую variableToString

https://github.com/lingtalfi/VariableToString

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

Автор: ling Размещён: 28.10.2015 12:47

1 плюс

4635 Репутация автора

$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)."'";
Автор: danielad Размещён: 09.06.2016 12:04

6 плюса

13289 Репутация автора

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

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

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

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

Автор: jimp Размещён: 31.08.2016 09:21

1 плюс

69 Репутация автора

Я думаю, что этот Вопрос сильно вводит в заблуждение (извините): toString () в Java - это не просто способ приведения чего-либо к String, это то, что делает приведение через via (string) или String.valueOf (), и это хорошо работает в PHP.

//Java
String myText = (string) myVar;
//PHP
$myText = (string) $myVar;

Одер

//Java
String myText = String.valueOf(myVar);
//PHP
$var = strval($varname);

Обратите внимание, что и то, и другое может быть проблематичным, поскольку Java является типом сохранения. Подробнее смотрите здесь. Но, как я уже сказал, это Casting и, следовательно, не эквивалентный toString () Java. ToString в Java не просто приводит объект к String, он дает вам представление String. И это то, что делает __toString в PHP

//Java
class SomeClass{
    public String toString(){ 
        return 'some string representation'; 
    } 
}
//php
class SomeClass{
    public function __toString()
    {
        return 'some string representation';
    }
}

Есть еще больше вариантов:

$no = 077543    
$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');  

Все эти методы возвращают строку.

Автор: Xanlantos Размещён: 21.12.2018 11:08
Вопросы из категории :
32x32