سؤال

كيف يمكنني تحويل قيمة متغير PHP إلى السلسلة ؟

كنت أبحث عن شيء أفضل من وصل مع سلسلة فارغة:

$myText = $myVar . '';

مثل ToString() طريقة في جافا أو .صافي.

هل كانت مفيدة؟

المحلول

يمكنك استخدام صب المشغلين:

$myText = (string)$myVar;

هناك المزيد من التفاصيل عن سلسلة الصب التحويل في قسم سلاسل PHP الدليل ، بما في ذلك التعامل مع القيم المنطقية و بالقيم الخالية.

نصائح أخرى

ويتم ذلك مع بتلبيس:

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

استخدام 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);

يمكنك إما استخدام بتلبيس:

$var = (string)$varname;

أو StringValue:

$var = strval($varname);

أو SetType:

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

أنهم جميعا العمل من أجل نفس الشيء من حيث النوع-شعوذة.

كيف يمكنني تحويل قيمة PHP متغير السلسلة ؟

قيمة يمكن تحويلها إلى سلسلة باستخدام (سلسلة) الزهر أو strval() وظيفة.(تحرير:كما توماس وذكر أيضا).

كما يجب أن يكون تلقائيا مسبوك بالنسبة لك عندما كنت استخدامه بمثابة سلسلة.

كنت تبحث عن strval:

string strval ( mixed $var )

الحصول على سلسلة قيمة متغير.راجع الوثائق على سلسلة مزيد من المعلومات حول تحويل السلسلة.

هذه الوظيفة ينفذ أي تنسيق على القيمة التي تم إرجاعها.إذا كنت تبحث عن وسيلة إلى صيغة رقمية قيمة سلسلة ، يرجى الاطلاع sprintf() أو number_format().

عن الأوليات فقط استخدام (string)$var أو طباعة هذا المتغير على الفور.PHP هو حيوي كتابة اللغة و المتغير سوف يكون مسبوك سلسلة على الطاير.

إذا كنت ترغب في تحويل الأشياء إلى سلاسل سوف تحتاج إلى تعريف __toString() طريقة إرجاع السلسلة.هذا الأسلوب هو ممنوع رمي استثناءات.

وضعه في الاقتباس المزدوجة يجب أن تعمل:

$myText = "$myVar";

أعتقد أنه من الجدير بالذكر أنه يمكنك التقاط أي الإخراج (مثل print_r, var_dump) في متغير باستخدام التخزين المؤقت الإخراج:

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

بفضل:https://stackoverflow.com/a/139491/987864

وثمة خيار آخر هو استخدام المدمج في settype وظيفة:

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

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

هذا الواقع يؤدي التحويل على متغير على عكس تلبيس و يسمح لك أن يكون عام طريقة التحويل إلى أنواع متعددة.

بالإضافة إلى الإجابة التي قدمها توماس جي.مايفيلد:

إذا كنت تتبع رابط السلسلة الصب اليدوي ، هناك حالة خاصة وهو أمر مهم جدا أن نفهم:

(سلسلة) يلقي هو الأفضل خصوصا إذا كان متغير $a هو كائن ، لأن PHP متابعة الصب البروتوكول وفقا طراز كائن عن طريق الاتصال __toString() طريقة سحرية (إذا كان هذا هو تعريف في فئة دولار يتم إنشاء مثيل من).

PHP لا شيء مماثل

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

على (سلسلة) الصب العملية الموصى بها تقنية PHP5+ البرمجة مما يجعل رمز أكثر وجوه المنحى.المنظمة البحرية الدولية هذا هو مثال رائع من تصميم التشابه (الفرق) إلى آخر OOP لغات مثل جافا/C#/الخ ، أيفي الخاصة بي طريقة (كلما يفعل الخير أو قيمتها).

كما ذكر آخرون ، الكائنات تحتاج __toString طريقة يلقي إلى سلسلة.كائن لا تحدد هذا الأسلوب لا يزال يمكن أن تنتج سلسلة التمثيل باستخدام spl_object_hash وظيفة.

هذه الدالة تقوم بإرجاع معرف فريد للكائن.هذا الرقم يمكن أن تستخدم تجزئة رئيسية لتخزين الكائنات ، أو تحديد كائن ، طالما أن الهدف هو تدمير.مرة واحدة والهدف هو تدمير البعثرة يمكن استخدامها للحصول على كائنات أخرى.

لدي قاعدة فئة الكائن مع __toString الأسلوب الذي تخلف عن الدعوة md5(spl_object_hash($this)) جعل الإخراج من الواضح فريدة من نوعها, منذ خرج من spl_object_hash يمكن أن تبدو مشابهة جدا بين الكائنات.

هذا هو مفيدة بشكل خاص لتصحيح التعليمات البرمجية حيث متغير تهيئة ككائن لاحقا في التعليمات البرمجية يشتبه أن تغيرت وجوه مختلفة.ببساطة مرددا فأر إلى السجل يمكن أن تكشف عن التغيير من وجوه التجزئة (أو لا).

بعض إن لم يكن كل من الأساليب المذكورة أعلاه تفشل عندما المقصود string متغير يحتوي على صفر أي 077543 محاولة تحويل هذا المتغير فشل في الحصول على المقصود السلسلة لأن المتغير يتم تحويلها إلى القاعدة 8 (ثماني).

كل هذه سوف تجعل $str قيمة 32611

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

الوثائق تقول أن يمكنك القيام به أيضا:

$str = "$foo";

انها نفس المدلى بها ، ولكن أعتقد أنها تبدو أجمل.

المصدر:

أعتقد أن هذا السؤال هو قليلا مضللة منذ ذلك الحين ، toString() في جافا ليس مجرد وسيلة يلقي شيئا السلسلة ، وهذا هو ما صب عبر (سلسلة) أو السلسلة.valueOf() لا يعمل جيدا في PHP.

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

لاحظ أن هذا يمكن أن يكون مشكلة كما جافا typesave. انظر هنا لمزيد من التفاصيل

ولكن كما قلت هذا هو الصب وبالتالي لا يعادل جافا toString().toString في جافا لا يلقي كائن إلى سلسلة ، 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'

ماذا يعني "إعطاء تمثيل سلسلة"?تخيل الدرجة libary مع الملايين من الكتب.

  • صب تلك الفئة إلى سلسلة من شأنه (افتراضيا) تحويل البيانات هنا جميع الكتب في سلسلة لذا السلسلة سوف تكون طويلة جدا و في معظم الأحيان غير مفيدة جدا eigther.
  • سلسلة بدلا تعطيك سلسلة repesentation أيفقط اسم libary.هذا هو أقصر وأسبابها يعطيك أقل ولكن أكثر من المعلومات الهامة.

هذه هي كل صالحة aproches لكن مع مختلف الأهداف ، 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 بعض الآخرين سوف تفشل على Objcts نلقي نظرة على PHP documenation للحصول على مزيد من التفاصيل.

علامات الاقتباس المزدوجة يجب أن تعمل أيضا...يجب إنشاء سلسلة ، ومن ثم ينبغي إلحاق/إدراج مسبوك سلسلة قيمة $myVar بين 2 سلاسل فارغة.

يمكنك دائما إنشاء أسلوب اسمه .ToString ($) التي يعود

$in . '';  

إذا كنت تقوم بتحويل أي شيء آخر من أنواع بسيطة مثل الأعداد الصحيحة أو القيم المنطقية ، سوف تحتاج إلى كتابة الخاصة بك وظيفة/طريقة النوع الذي كنت تحاول تحويل, وإلا PHP فقط طباعة نوع (مثل مجموعة ، GoogleSniffer ، أو بيديت).

PHP هو كتابة حيوي مثل كريس فورنييه قال: "إذا كنت تستخدم مثل سلسلة يصبح السلسلة".إذا كنت تبحث عن المزيد من التحكم في شكل سلسلة ثم printf هو الإجابة.

يمكنك استخدام أيضا ، var_export وظيفة 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)."'";

الكائنات أنك قد لا تكون قادرا على استخدام المدلى بها المشغل.بدلا من استخدام json_encode() الأسلوب.

على سبيل المثال التالي سيتم إخراج محتويات سجل الخطأ:

error_log(json_encode($args));

جرب هذا غريب قليلا ولكن نهج العمل لتحويل النصوص جزء من stdClass إلى نوع السلسلة:

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

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

يمكنني استخدام variableToString

https://github.com/lingtalfi/VariableToString

أنه يتعامل مع كل نوع php و مرنة (يمكن تمديدها إذا كنت تريد)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top