首页 文章

PHP相当于.NET / Java的toString()

提问于
浏览
528

如何将PHP变量的值转换为字符串?

我正在寻找比用空字符串连接更好的东西:

$myText = $myVar . '';

与Java或.NET中的 ToString() 方法类似 .

24 回答

  • 1

    我认为值得一提的是,您可以通过使用输出缓冲来捕获变量中的任何输出(如 print_rvar_dump ):

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

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

  • -1

    另一种选择是使用内置的settype函数:

    <?php
    $foo = "5bar"; // string
    $bar = true;   // boolean
    
    settype($foo, "integer"); // $foo is now 5   (integer)
    settype($bar, "string");  // $bar is now "1" (string)
    ?>
    

    与类型转换不同,这实际上对变量执行转换,并允许您具有转换为多种类型的一般方法 .

  • 57

    我使用variableToString

    https://github.com/lingtalfi/VariableToString

    它处理每种PHP类型并且是灵活的(你可以根据需要扩展它)

  • 764

    你可以使用casting operators

    $myText = (string)$myVar;
    

    PHP手册的Strings section中有更多关于字符串转换和转换的细节,包括对布尔值和空值的特殊处理 .

  • 32

    这是通过类型转换完成的:

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

    使用 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);
    
  • 27

    你可以使用类型转换:

    $var = (string)$varname;
    

    或StringValue:

    $var = strval($varname);
    

    或SetType:

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

    他们都在Type-Juggling方面做同样的事情 .

  • 296

    如何将PHP变量的值转换为字符串?

    可以使用(string) caststrval()函数将值转换为字符串 . (编辑:如Thomas也说明) .

    当您将其用作字符串时,它也应该自动为您呈现 .

  • 17

    您正在寻找strval

    string strval(mixed $ var)获取变量的字符串值 . 有关转换为字符串的更多信息,请参阅有关字符串的文档 . 此函数不对返回的值执行格式化 . 如果您正在寻找一种将数值格式化为字符串的方法,请参阅sprintf()或number_format() .

  • 1

    对于基元,只需使用 (string)$var 或立即打印此变量 . PHP是动态类型语言,变量将被动态转换为字符串 .

    如果要将对象转换为字符串,则需要定义返回字符串的 __toString() 方法 . 禁止此方法抛出异常 .

  • 123

    将它放在双引号中应该有效:

    $myText = "$myVar";
    
  • 5

    除了Thomas G. Mayfield给出的答案:

    如果您按照字符串铸造手册的链接,有一个特殊情况,这是非常重要的理解:

    (字符串)强制转换是更可取的,特别是如果您的变量 $a 是一个对象,因为PHP将根据其对象模型通过调用 __toString() magic方法跟随转换protocol(如果这样在$ a实例化的类中定义) .

    PHP做了类似的事情

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

    (字符串)转换操作是PHP5编程的推荐技术,使代码更加面向对象 . IMO这是与其他OOP语言(如Java / C#/等)的设计相似性(差异)的一个很好的例子,即以其自己的特殊PHP方式(无论是为了好还是为了 Value ) .

  • 3

    正如其他人所提到的,对象需要一个 __toString 方法来强制转换为字符串 . 没有定义该方法的对象仍然可以使用spl_object_hash函数生成字符串表示 .

    此函数返回对象的唯一标识符 . 只要对象未被销毁,该id就可以用作存储对象或用于识别对象的散列键 . 一旦对象被销毁,其哈希可以重用于其他对象 .

    我有一个带有 __toString 方法的基类Object类,默认调用 md5(spl_object_hash($this)) 使输出明显唯一,因为spl_object_hash的输出在对象之间看起来非常相似 .

    这对于调试变量初始化为Object的代码以及稍后在代码中怀疑已更改为其他Object的代码特别有用 . 简单地将变量回显到日志可以揭示对象散列(或不是)的变化 .

  • 7

    当预期的字符串变量具有前导零时,一些(如果不是全部)上述方法都失败,即077543尝试转换此类变量无法获得预期的字符串,因为该变量被转换为基数8(八进制) .

    所有这些都会使 $str 的值为32611

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

    文档说你也可以这样做:

    $str = "$foo";
    

    它与演员阵容相同,但我觉得它看起来更漂亮 .

    资源:

  • 7

    我认为这个问题有点误导,因为Java中的toString()不仅仅是一种向String强制转换的方法,也就是casting via(string)或String.valueOf()的作用,它在PHP中运行良好 .

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

    请注意,这可能是有问题的,因为Java是typesave . See Here For more Details

    但正如我所说,这是Casting,因此不等同于Java的toString() . Java中的toString doesn't just cast an object to a String, it insted will give you the String representation . 那就是PHP中的__toString()

    //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 StrValTest);//'some string representation'
    

    “赋予字符串表示”是什么意思?想象一下拥有数百万本书的图书馆 .

    • 将该类转换为String(默认情况下)会将数据(此处为所有书籍)转换为字符串,因此String将非常长并且大部分时间都不是非常有用 .

    • To String insted将为您提供String重复表示,即只提供libary的名称 . 这个更短,因此为您提供更少但更重要的信息 .

    这些都是有效的aproches,但目标非常不同,neigter是每个案例的完美解决方案,你必须明智地满足你的需求 .

    Sure there are even more options:

    $no = 77543  //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
    //as you said
    $str = $no . '';
    

    所有这些方法都将返回一个String,其中一些使用__toString internaly,其他一些将在Objcts上失败 .

  • 15

    双引号也应该起作用......它应该创建一个字符串,然后它应该在两个空字符串之间APPEND / INSERT $ myVar的转换STRING值 .

  • 3

    您始终可以创建一个返回的名为.ToString($ in)的方法

    $in . '';
    
  • 1

    如果你要转换除整数或布尔等简单类型之外的任何东西,你需要为你想要转换的类型编写自己的函数/方法,否则PHP只会打印类型(例如数组,GoogleSniffer) ,或坐浴盆) .

  • 1

    PHP是动态类型的,所以像Chris Fournier所说,"If you use it like a string it becomes a string" . 如果您正在寻找对字符串格式的更多控制,那么printf就是您的答案 .

  • 1

    你也可以使用var_export php函数 .

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

    对于对象,您可能无法使用强制转换运算符 . 相反,我使用 json_encode() 方法 .

    例如,以下内容将输出内容到错误日志:

    error_log(json_encode($args));
    
  • 7

    试试这个奇怪但有效的方法将stdClass的文本部分转换为字符串类型:

    $my_std_obj_result = $SomeResponse->return->data; //specific to object/implementation
    
    $my_string_result = implode ((array)$my_std_obj_result); //do conversion
    

相关问题