Domanda

Come faccio a convertire il valore di una variabile PHP stringa?

Ero alla ricerca di qualcosa di meglio rispetto alla concatenazione con una stringa vuota:

$myText = $myVar . '';

Come il ToString() metodo in Java o .NET.

È stato utile?

Soluzione

È possibile utilizzare il casting operatori:

$myText = (string)$myVar;

Non ci sono ulteriori dettagli per la stringa di fusione e di conversione in Stringhe di sezione il manuale di PHP, compresa la gestione speciale per i booleani e i valori null.

Altri suggerimenti

Questo viene fatto con 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

In una classe si può definire ciò che è uscita utilizzando il metodo magico __toString.Un esempio è riportato di seguito:

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"

Alcuni tipi di casting esempi:

$i = 1;

// int 1
var_dump((int) $i);

// bool true
var_dump((bool) $i);

// string "1"
var_dump((string) 1);

Utilizzare print_r:

$myText = print_r($myVar,true);

È inoltre possibile utilizzare come

$myText = print_r($myVar,true)."foo bar";

questo set $myText per una stringa, come :

array (
  0 => '11',
)foo bar

Utilizzare var_export per ottenere un po ' di info (con i tipi di variabile,...) :

$myText = var_export($myVar,true);

È possibile utilizzare typecasting:

$var = (string)$varname;

o StringValue:

$var = strval($varname);

o SetType:

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

Lavorano tutti per la stessa cosa in termini di Tipo di Giocoleria.

Come faccio a convertire il valore di un PHP variabile di stringa?

Un valore può essere convertito in una stringa utilizzando la (stringa) cast o il strval() funzione.(Edit:Come Thomas ha anche dichiarato).

Inoltre, dovrebbe essere automaticamente colato per voi quando si utilizza come una stringa.

Stai cercando strval:

string strval ( mixed $var )

Ottenere il valore di stringa di una variabile.Consultare la documentazione sulla stringa per ulteriori informazioni sulla conversione di stringa.

Questa funzione non esegue alcuna formattazione il valore restituito.Se si sono cercando un modo per formato numerico valore come stringa, si prega di consultare sprintf() o number_format().

Per le primitive basta usare (string)$var o stampa questa variabile subito.PHP è un linguaggio tipizzato in modo dinamico e variabile saranno trasformati in stringa al volo.

Se si desidera convertire gli oggetti in stringhe è necessario definire __toString() metodo che restituisce una stringa.Questo metodo è vietato il lancio di eccezioni.

Metterlo tra virgolette dovrebbe funzionare:

$myText = "$myVar";

Penso che vale la pena ricordare che si può prendere qualsiasi uscita (come print_r, var_dump) in una variabile utilizzando il buffer di uscita:

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

Grazie a:https://stackoverflow.com/a/139491/987864

Un'altra opzione è quella di utilizzare il costruito nel settype funzione:

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

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

Questo in realtà esegue una conversione sulla variabile a differenza di typecasting e consente di avere un metodo generale per la conversione a più tipi.

In aggiunta alla risposta di Thomas G.Mayfield:

Se si segue il link per la stringa di colata manuale, c'è un caso speciale, che è molto importante per capire:

(stringa) cast è preferibile, soprattutto se la tua variabile $a è un oggetto, perché PHP seguirà il casting protocollo secondo il suo modello di oggetto chiamando __toString() metodo magico (se tale è definito nella classe di cui $a viene creata un'istanza da).

PHP fa qualcosa di simile a

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

Il (stringa) operazione di fusione è una tecnica consigliata per PHP5+ di programmazione, rendendo il codice più Object-Oriented.IMO questo è un bell'esempio di design somiglianza (differenza) di altri linguaggi orientati agli oggetti come Java/C#/etc., cioèin un suo speciale PHP modo (se è per il bene o per il valore).

Come altri hanno detto, oggetti bisogno di un __toString metodo per essere gettato in una stringa.Un oggetto che non definire tale metodo può ancora produrre una rappresentazione di stringa utilizzando il spl_object_hash funzione.

Questa funzione restituisce un identificatore univoco per l'oggetto.Questo id può essere utilizzato come una chiave hash per la memorizzazione di oggetti, o per identificare un oggetto, finché l'oggetto non viene distrutto.Una volta che l'oggetto viene distrutto, il suo hash possono essere riutilizzati per altri oggetti.

Ho un Oggetto di base di classe con un __toString il metodo di default per la chiamata di md5(spl_object_hash($this)) per rendere l'uscita chiaramente unico, dato che l'uscita dalla spl_object_hash possono sembrare molto simili tra gli oggetti.

Questo è particolarmente utile per il debug di codice in cui una variabile viene inizializzata come un Oggetto, e più tardi il codice è sospettato di aver cambiato per un Oggetto diverso.Semplicemente, riecheggiando il var per il log è in grado di rivelare il cambiamento dell'oggetto hash (o non).

Alcuni, se non tutti i metodi di cui sopra non previsto variabile stringa è uno zero ie 077543 un tentativo di convertire una variabile non riesce a ottenere la stringa previsto perché la variabile è convertito base 8 (ottale).

Tutti questi faranno $str hanno un valore di 32611

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

La documentazione dice che si può anche fare:

$str = "$foo";

E ' lo stesso cast, ma penso che sembra più bella.

Fonte:

Credo che questa Domanda è un po ' fuorviante in quanto, toString() in Java non è solo un modo per lanciare qualcosa di una Stringa, che è quello che casting via (stringa) o una Stringa.valueOf() non funziona bene come in PHP.

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

Si noti che questo può essere Problematico, in quanto Java è typesave. Vedi Qui Per maggiori Dettagli

Ma come ho detto questo è il Casting e, pertanto, non è l'equivalente di Java metodo toString().toString in Java non basta inserire un oggetto in una Stringa, invece vi darà la rappresentazione in forma di Stringa.E questo è quello che __toString() in PHP non

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

E dall'altro lato:

//Java
new SomeClass().toString();//'some string representation'
//PHP
strval(new SomeClass);//'some string representation'

Che cosa intendo per "dare la rappresentazione di Stringa"?Immaginate una classe per una biblioteca con migliaia di libri.

  • Casting classe in una Stringa (per impostazione predefinita) consente di convertire i dati, qui tutti i libri, in una stringa, in modo che la Stringa sarebbe molto lungo e la maggior parte del tempo non molto utile eigther.
  • Per Stringa invece vi darà la Stringa repesentation cioèsolo il nome della biblioteca.Questo è più breve e quindi dà meno ma più importante di informazioni.

Questi sono entrambi validi aproches ma con diversi obiettivi, neigter è una soluzione perfetta per ogni caso, e si sono a scelta davvero saggiamente che si adatta meglio ai vostri bisogni.

Certo, ci sono ancora più opzioni:

$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

Tutti questi metodi restituiscono una Stringa, alcuni di loro usando __toString internaly alcuni, gli altri non riusciranno a Objcts dare un'occhiata al PHP documenation per ulteriori dettagli.

Le doppie virgolette dovrebbe lavorare troppo...si dovrebbe creare una stringa, allora si dovrebbe AGGIUNGERE/INSERIRE la fusione di STRINGA di un valore di $myVar tra le 2 stringhe vuote.

Si può sempre creare un metodo chiamato .ToString ($) che restituisce

$in . '';  

Se si sta convertendo tutt'altro che semplice tipi come numeri interi o valori booleani, avresti bisogno di scrivere la propria funzione/metodo per il tipo che stai cercando di convertire, altrimenti PHP basta stampare il tipo (come array, GoogleSniffer, o Bidet).

PHP è digitato in modo dinamico, così come Chris Fournier ha detto, "Se lo si usa come una stringa diventa una stringa".Se siete alla ricerca per un maggiore controllo sul formato della stringa printf è la tua risposta.

È possibile utilizzare anche var_export funzione 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)."'";

Per gli oggetti, si potrebbe non essere in grado di utilizzare l'operatore di cast.Invece, utilizzare il json_encode() metodo.

Per esempio, il seguente output il contenuto del log di errore:

error_log(json_encode($args));

Provare questo po ' strano, ma un metodo di lavoro per convertire la parte testuale del stdClass di tipo stringa:

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

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

Io uso variableToString

https://github.com/lingtalfi/VariableToString

Gestisce ogni tipo php e flessibile (si può estendere se volete)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top