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

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

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

$myText = $myVar . '';

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

Кажется, это правильный ответ: stackoverflow.com/a/3559247/11236 (print_r(foo, true))!

ripper234 03.01.2013 20:18

Я бы использовал json_encode($myText). Я обнаружил, что предлагаемые решения print_r и (string)var хорошо работают для скалярных значений и простых объектов. Для сложных переменных, классов или объектов, если полный __toString() не определен, я предпочитаю вышеупомянутый json_encode.

Eric Kigathi 12.01.2019 19:48
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
558
2
1 508 748
25
Перейти к ответу Данный вопрос помечен как решенный

Ответы 25

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

$myText = "$myVar";

Это работает, но я не знаю, является ли это стандартным способом сделать это в PHP.

Antoine Aubry 15.09.2012 13:56

Это очень стандартный способ сделать это в трепать

Yauhen Yakimovich 12.03.2013 02:13

Этот метод будет работать, если $ myVar является объектом класса с __toString или скалярным типом. В других случаях выдает ошибку.

zennin 21.02.2017 15:45

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

$in . '';  

How do I convert the value of a PHP variable to string?

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

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

Ответ принят как подходящий

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

$myText = (string)$myVar;

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

Object of class Foo could not be converted to string. Есть ли общие решения, которые могут преобразовать что угодно (массивы + объекты + что угодно) в строку?

ripper234 03.01.2013 19:42

Это ответ - stackoverflow.com/questions/28098/php-tostring-equivalent/…

ripper234 03.01.2013 20:20

Примечание: при использовании с массивами появится уведомление PHP.

dave1010 12.02.2013 21:22

@MarkAmery Он дал ответ, который неявно называет __toString() «Волшебным методом», но не упомянул об этом вообще. Пользователь запросил ответ, похожий на метод Java toString(), а в PHP это функция __toString().

Ben Leggiero 09.04.2013 05:41

@Supuhstar Возможно, вы не согласны, но, учитывая остальную часть содержания вопроса, я думаю, что гораздо более вероятно, что под 'like tostring ()' спрашивающий имел в виду «наиболее идиоматический способ преобразования чего-либо в строку», а не « способ преобразования объекта в строку специально с помощью метода этого объекта ". Конечно, согласно второй интерпретации правильный ответ - __toString(), но согласно предыдущей интерпретации (которая, я думаю, более разумна), это определенно либо приведение, либо strval() - вы, очевидно, не можете использовать __toString для не-объекта, такого как целое число. , так как у них его нет.

Mark Amery 10.04.2013 03:39

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

Tom Mayfield 11.04.2013 03:04

@MarkAmery Я как бы имел в виду, что если вы хотите указать, как выглядит строковая версия вашего объекта, вам нужно будет указать метод __toString(). @ ThomasG.Mayfield не помешает отредактировать и добавить этот факт.

Ben Leggiero 11.04.2013 06:25

@Supuhstar Ах да, я наконец понял, откуда ты. Извини, если раньше я был тупым. Я согласен с тем, что это важная деталь, и было бы полезно добавить ее, возможно, разделив ответ на разделы «Преобразование примитивов» и «Преобразование объектов» с заголовками.

Mark Amery 11.04.2013 13:32

или просто сделайте это ''. $ yourvariable. ''

Brij Raj Singh - MSFT 09.10.2013 15:53

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

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

Это делается с помощью приведения типов:

$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);

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

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

Вы ищете Strval:

string strval ( mixed $var )

Get the string value of a variable. See the documentation on string for more information on converting to string.

This function performs no formatting on the returned value. If you are looking for a way to format a numeric value as a string, please see sprintf() or number_format().

На самом деле это очень полезно, потому что я хотел преобразовать все числа в строки без использования настраиваемого обратного вызова. $strings = array_map('strval', $my_numbers);

peterchaula 08.06.2017 15:47

Это единственный ответ, который работает с array_map и строковыми вызываемыми объектами в целом.

Danon 04.10.2018 18:07

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

$var = (string)$varname;

или StringValue:

$var = strval($varname);

или SetType:

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

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

strval ($ varname) помогает мне, особенно когда значение возвращается как тип "вариант" и его нужно преобразовать в строку или int.

Milan 27.02.2014 00:19

strval() - это то, что я искал, потому что хотел использовать его с array_walk. Например. $array = array('cat',$object); array_walk($array,'strval'); // $array = array('cat',$object->__toString)

Buttle Butkus 19.04.2014 03:31

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

«когда возвращаемый параметр - ИСТИНА, [print_r] вернет строку». Поскольку print_r - хороший способ распечатать объекты, массивы (а также числа / строки), это хороший способ преобразовать объект в удобочитаемую строку.

Cedric 01.09.2010 14:51

К вашему сведению, новички, часть true очень важна! Я попробовал несколько методов преобразования строк, включая print_r, и был разочарован каждым из них, а затем обнаружил параметр true (прочтите документацию, чтобы узнать, почему он работает).

ripper234 03.01.2013 20:19

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

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

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

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

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

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

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

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

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

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

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

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

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

error_log(json_encode($args));

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

$str = "$foo";

Он такой же, как и гипс, но выглядит красивее.

Источник:

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

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

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

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

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

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

Стоит отметить, что вам это не нужно с print_r. Просто используйте переопределение для возврата в виде строки.

ars265 17.06.2014 23:13

Лучше использовать $result = var_export($someVar, true) без ob.

Danon 04.10.2018 18:07

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

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

Все это заставит $str иметь значение 32611:

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

Это PICNIC (проблема в кресле, а не в компьютере) как здесь ничего не подводит! print 077543; выводит 32611, так что это правильное строковое значение $no. Никто не ожидает, что (string)+1 вернет строку +1 (он правильно возвращает 1) или что $no = 1+1; print (string)$no; выдаст 1+1. Примечания: (1) То же самое и для шестнадцатеричного ($no=0xff;). (2) Вы можете вернуть восьмеричное значение с помощью '0'.decoct($no); (3) $no = "077543"; сохраняет ведущее значение 0, «077543» + 1` дает 77544, а 077543+1 (правильно) дает 32612. (PS: не проголосовали против, так как эта ошибка является обычным явлением)

Tino 31.08.2017 09:45

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

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

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

Проголосовали против, так как я понятия не имею, что вы хотите нам сказать. Использование strval() на струнах - пустая трата времени.

Tino 31.08.2017 09:21

чувак, дело в том, что вы получили строковое значение = при повторном представлении оно будет "строкой". Но если вы хотите отобразить это в javascript, вам нужно сделать его 'stringx'

Daniel Adenew 04.09.2017 10:45
Это очень опасно (not to say: plain wrong). Please have a look at stackoverflow.com/q/168214 or stackoverflow.com/q/23740548 to understand how to safely pass something from PHP to JS! (Sorry for being a bit offtopic: Passing a PHP var to JS was not part of the question.)
Tino 07.09.2017 12:52

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

This function returns a unique identifier for the object. This id can be used as a hash key for storing objects, or for identifying an object, as long as the object is not destroyed. Once the object is destroyed, its hash may be reused for other objects.

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

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

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

// Java
String myText = (string) myVar;

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

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

Но, как я уже сказал, это кастинг и, следовательно, не эквивалент Java toString ().

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

Все эти методы возвращают String, некоторые из них используют __toString внутри, а некоторые другие не работают с объектами. Взгляните на Документация PHP для получения более подробной информации.

__toString метод или (строка) приведение

$string=(string)$variable;  //force make string 

вы можете рассматривать объект как строку


class Foo
{

  public function __toString()
  {
     return "foo";
  }

}

echo new Foo(); //foo

Кроме того, есть еще один трюк, я предполагаю, что у меня есть переменная типа int, я хочу сделать строку это


$string=''.$intvariable;

Другие вопросы по теме