Сведения о вопросе

rjevskii

04:26, 12th August, 2020

Теги

php   string    

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

Просмотров: 462   Ответов: 24

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

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

$myText = $myVar . '';

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



  Сведения об ответе

lourence

11:55, 21st August, 2020

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

$myText = (string)$myVar;

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


  Сведения об ответе

$DOLLAR

05:45, 27th August, 2020

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


  Сведения об ответе

piter

01:00, 27th August, 2020

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


  Сведения об ответе

prince

12:00, 4th August, 2020

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

$var = (string)$varname;

или StringValue:

$var = strval($varname);

или SetType:

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

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


  Сведения об ответе

prince

07:33, 14th August, 2020

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

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

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


  Сведения об ответе

+-*/

04:44, 4th August, 2020

Вы ищете strval :

string strval ( mixed $var )

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

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


  Сведения об ответе

COOL

19:30, 23rd August, 2020

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

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


  Сведения об ответе

dumai

21:02, 25th August, 2020

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

$myText = "$myVar";


  Сведения об ответе

dump

14:26, 22nd August, 2020

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

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

Благодаря: https://stackoverflow.com/a/139491/987864


  Сведения об ответе

Chhiki

16:16, 18th August, 2020

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


  Сведения об ответе

PIRLO

04:11, 6th August, 2020

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

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

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

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

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

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


  Сведения об ответе

ЯЯ__4

10:02, 13th August, 2020

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

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

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

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


  Сведения об ответе

piter

15:51, 6th August, 2020

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

Все это приведет к тому, что $str будет иметь значение 32611

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


  Сведения об ответе

park

13:50, 25th August, 2020

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

$str = "$foo";

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

Источник:


  Сведения об ответе

baggs

17:13, 7th August, 2020

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

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

Обратите внимание, что это может быть проблематично, так как Java является сохранением типа. Смотрите здесь для получения более подробной информации

Но, как я уже сказал, это литье и, следовательно, не эквивалент Java toString(). toString в Java не просто приводит объект к строке, он insted даст вам строковое представление . И вот что делает __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'

Что я подразумеваю под "предоставлением строкового представления"? Представьте себе класс для библиотеки с миллионами книг.

  • Приведение этого класса к строке будет (по умолчанию) преобразовывать данные, здесь все книги, в строку, так что строка будет очень длинной и большую часть времени не очень полезной.
  • В строку вместо даст вам строку repesentation, т. е. только название этой библиотеки. Это короче и поэтому дает вам меньше, но более важную информацию.

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

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

$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 concat an empty string works too

Все эти методы будут возвращать строку, некоторые из них используют _ _ toString internaly некоторые другие не будут работать на Objects взгляните на PHP documentation для получения более подробной информации.


  Сведения об ответе

padenie

08:46, 13th August, 2020

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

$in . '';  


  Сведения об ответе

repe

21:06, 1st October, 2020

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


  Сведения об ответе

$DOLLAR

08:52, 28th August, 2020

PHP динамически типизируется, поэтому, как сказал Крис Фурнье, "If you use it like a string it becomes a string". Если вы ищете больше контроля над форматом строки, то printf -это ваш ответ.


  Сведения об ответе

SILA

23:08, 19th August, 2020

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


  Сведения об ответе

PAGE

04:57, 1st August, 2020

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


  Сведения об ответе

PIRLO

10:48, 27th August, 2020

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


  Сведения об ответе

9090

18:07, 13th August, 2020

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

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

error_log(json_encode($args));


  Сведения об ответе

DO__IT

17:41, 23rd August, 2020

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

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

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


  Сведения об ответе

COOL

19:21, 17th August, 2020

Я использую variableToString

https://github.com/lingtalfi/VariableToString

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться