.NET / জাভার টুস্ট্রিং () এর সমতুল্য পিএইচপি


556

আমি কীভাবে পিএইচপি ভেরিয়েবলের মানকে স্ট্রিংয়ে রূপান্তর করব?

আমি একটি খালি স্ট্রিং দিয়ে যুক্তি দেওয়ার চেয়ে আরও ভাল কিছু খুঁজছিলাম:

$myText = $myVar . '';

ToString()জাভা বা। নেট এ পদ্ধতিটি পছন্দ করুন ।


6
এটি সঠিক উত্তর বলে মনে হচ্ছে: stackoverflow.com/a/3559247/11236 ( print_r(foo, true))!
ripper234

আমি ব্যবহার করতাম json_encode($myText)। আমি খুঁজে পেয়েছি যে প্রস্তাবিত সমাধানগুলি print_rএবং (string)varস্কেলারের মান এবং সাধারণ অবজেক্টগুলির জন্য ভাল কাজ করে। জটিল ভেরিয়েবল, ক্লাস বা অবজেক্টের জন্য যদি কোনও সম্পূর্ণ __toString()সংজ্ঞায়িত না হয় তবে আমি পূর্বোক্তটি পছন্দ করি json_encode
এরিক কিগাথি

উত্তর:


791

আপনি ingালাই অপারেটরগুলি ব্যবহার করতে পারেন :

$myText = (string)$myVar;

পিএইচপি ম্যানুয়ালটির স্ট্রিংস বিভাগে স্ট্রিং কাস্টিং এবং রূপান্তরকরণের জন্য আরও বিস্তারিত রয়েছে, বুলিয়ান এবং নালগুলির জন্য বিশেষ হ্যান্ডলিং সহ।


11
Object of class Foo could not be converted to string। এমন কি কোনও সাধারণ সমাধান যা কোনও কিছু (অ্যারে + অবজেক্ট + যাই হোক না কেন) স্ট্রিংয়ে রূপান্তর করতে পারে?
ripper234


2
দ্রষ্টব্য: অ্যারে ব্যবহার করার সময় এটি একটি পিএইচপি বিজ্ঞপ্তি দেবে।
dave1010

29
@ মার্কআমেরি তিনি একটি উত্তর দিয়েছেন যা সুস্পষ্টভাবে __toString()"ম্যাজিক পদ্ধতি" হিসাবে ডাকে , তবে এটি মোটেই উল্লেখ করেনি। ব্যবহারকারী একটি উত্তর চেয়েছিলেন যা জাভা toString()পদ্ধতির মতো ছিল , এবং পিএইচপি-তে, এটি __toString()ফাংশন।
সুপহস্তার

2
@ সুপুহস্তর আহ ঠিক আছে, আমি শেষ পর্যন্ত বুঝতে পেরেছি আপনি কোথা থেকে এসেছেন। দুঃখিত যদি আমি আগে বাধা হয়ে থাকি। আমি সম্মত হই যে এটি একটি প্রাসঙ্গিক বিবরণ এবং এটি যুক্ত করা মূল্যবান হবে, সম্ভবত উত্তরটিকে 'রূপান্তরিত প্রাইমাইভস' এবং 'শিরোনামগুলির সাথে রূপান্তরকরণ' বিভাগগুলিতে আলাদা করা।
মার্ক আমেরিকা

309

এটি টাইপকাস্টিংয়ের মাধ্যমে করা হয়:

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

126

মুদ্রণ_আর ব্যবহার করুন :

$myText = print_r($myVar,true);

আপনি এটির মতো ব্যবহার করতে পারেন:

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

এটি $myTextস্ট্রিংয়ে সেট করবে , যেমন:

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

কিছুটা আরও তথ্য পেতে ভ্যার_এক্সপোর্ট ব্যবহার করুন (ভেরিয়েবলের ধরণের সাথে ...):

$myText = var_export($myVar,true);

1
"যখন রিটার্ন পরামিতিটি সত্য হয়, [মুদ্রণ_আর] একটি স্ট্রিং ফিরিয়ে দেবে।" যেহেতু মুদ্রণ_আর হ'ল অবজেক্টস, অ্যারেগুলি (এবং সংখ্যা / স্ট্রিংগুলি) প্রিন্ট করার একটি দুর্দান্ত উপায়, এটি কোনও বস্তুকে মানব-পঠনযোগ্য স্ট্রিংয়ে রূপান্তরিত করার একটি ভাল উপায়।
সেড্রিক

1
এফওয়াইআইয়ের নতুনরা, trueঅংশটি প্রয়োজনীয়! আমি স্ট্রিং রূপান্তরকরণের কয়েকটি পদ্ধতির চেষ্টা করেছি print_rএবং সেগুলি থেকে হতাশ হয়েছি এবং তারপরে আমি trueপ্যারামিটারটি আবিষ্কার করেছি (এটি কেন কাজ করে তার জন্য ডকুমেন্টেশন পড়ুন)।
রিপার 234

57

আপনি হয় টাইপকাস্টিং ব্যবহার করতে পারেন:

$var = (string)$varname;

বা স্ট্রিংভ্যালু:

$var = strval($varname);

বা সেটটাইপ:

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

তারা সকলেই টাইপ-জাগলিংয়ের ক্ষেত্রে একই জিনিসটির জন্য কাজ করে।


স্ট্রভাল ($ বর্ণ) আমার জন্য কৌতুক করে তোলে, বিশেষত যখন মানটি "ভেরিয়েন্ট" টাইপ হিসাবে ফিরে আসে এবং স্ট্রিং বা ইন্টিতে রূপান্তরিত হওয়া দরকার।
মিলান

strval()আমি যা খুঁজছিলাম তা হ'ল কারণ আমি এটি ব্যবহার করতে চেয়েছিলাম array_walk। উদাহরণস্বরূপ$array = array('cat',$object); array_walk($array,'strval'); // $array = array('cat',$object->__toString)
বাটল বাটকাস

33

আমি কীভাবে পিএইচপি ভেরিয়েবলের মানকে স্ট্রিংয়ে রূপান্তর করব?

(স্ট্রিং) কাস্ট বা স্ট্রভাল () ফাংশনটি ব্যবহার করে একটি মান একটি স্ট্রিংয়ে রূপান্তরিত হতে পারে । (সম্পাদনা: যেমন টমাসও বলেছেন)

আপনি যখন স্ট্রিং হিসাবে ব্যবহার করেন এটি স্বয়ংক্রিয়ভাবে আপনার জন্যও কাস্ট করা উচিত।


28

আপনি স্ট্রਵਲ খুঁজছেন :

string strval ( mixed $var )

একটি ভেরিয়েবলের স্ট্রিং মান পান। স্ট্রিংয়ে রূপান্তর করতে আরও তথ্যের জন্য স্ট্রিংয়ের ডকুমেন্টেশন দেখুন।

এই ফাংশনটি প্রত্যাবর্তিত মানের কোনও বিন্যাস সম্পাদন করে না। আপনি যদি কোনও সংখ্যার মানটিকে স্ট্রিং হিসাবে ফর্ম্যাট করার উপায় খুঁজছেন তবে অনুগ্রহ করে স্প্রিন্টফ () বা সংখ্যা_ ফর্ম্যাট () দেখুন।


3
এটি আসলে খুব সহায়ক কারণ আমি একটি কাস্টম কলব্যাক ব্যবহার না করেই সমস্ত সংখ্যাকে স্ট্রিংয়ে রূপান্তর করতে চেয়েছিলাম। $strings = array_map('strval', $my_numbers);
পিটারচাউলা

এটি কেবলমাত্র উত্তর যা সাথে কাজ করে array_mapএবং সাধারণভাবে কলযোগ্যকে স্ট্রিং করে।
ড্যানন

18

আদিমদের জন্য (string)$varসরাসরি এই পরিবর্তনশীলটি সরাসরি ব্যবহার করুন বা মুদ্রণ করুন। পিএইচপি গতিশীলভাবে টাইপ করা ভাষা এবং ভেরিয়েবল ফ্লাইয়ের স্ট্রিংয়ে কাস্ট করা হবে।

আপনি যদি অবজেক্টগুলিকে স্ট্রিংয়ে রূপান্তর করতে চান তবে আপনাকে স্ট্রিংটি প্রদানের __toString()পদ্ধতিটি নির্ধারণ করতে হবে । এই পদ্ধতিটি ব্যতিক্রম ছোঁড়া নিষিদ্ধ।


15

এটিকে ডাবল উদ্ধৃতিতে রাখার কাজ করা উচিত:

$myText = "$myVar";

এটি কাজ করে, তবে পিএইচপি-তে এটি করার মানক উপায় কিনা তা আমি জানি না।
এন্টোইন অব্রি

এটা এরকম একটি খুব আদর্শ উপায় হয় ব্যাশ
Yauhen Yakimovich

এই পদ্ধতিটি যদি কাজ করে if myVar __to স্ট্রিং বা স্কেলার প্রকারের শ্রেণীর একটি বিষয়। অন্যান্য ক্ষেত্রে একটি ত্রুটি উত্পন্ন করে।
zennin

11

আমি মনে করি এটি উল্লেখযোগ্য যে আপনি আউটপুট বাফারিং ব্যবহার করে কোনও চলকটিতে (যেমন print_r, var_dump) কোনও আউটপুট ধরতে পারেন :

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

ধন্যবাদ: আমি কীভাবে একটি স্ট্রিংয়ে var_dump এর ফলাফল ক্যাপচার করতে পারি?


1
এটি প্রিন্ট_আর দিয়ে আপনার প্রয়োজন নেই তা উল্লেখযোগ্য । স্ট্রিং হিসাবে ফিরে আসতে কেবল ওভাররাইড ব্যবহার করুন।
ars265

1
একটি ভাল উপায় $result = var_export($someVar, true)ওব ছাড়াই ব্যবহার করা হবে ।
ড্যানন

8

আরেকটি বিকল্প হ'ল বিল্ট ইন সেট টাইপ ফাংশনটি ব্যবহার করা :

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

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

এটি আসলে টাইপকাস্টিংয়ের বিপরীতে ভেরিয়েবলের একটি রূপান্তর সম্পাদন করে এবং আপনাকে একাধিক ধরণের রূপান্তর করার সাধারণ উপায় থাকতে দেয়।


8

টমাস জি মেফিল্ডের দেওয়া উত্তর ছাড়াও:

আপনি যদি স্ট্রিং ingালাইয়ের ম্যানুয়ালটির লিঙ্কটি অনুসরণ করেন তবে একটি বিশেষ কেস রয়েছে যা বোঝার জন্য এটি বেশ গুরুত্বপূর্ণ:

(স্ট্রিং) cast ালাই বেশি পছন্দনীয় বিশেষত যদি আপনার চলক $ এ কোনও অবজেক্ট হয়, কারণ পিএইচপি __toString () ম্যাজিক পদ্ধতিতে কল করে তার অবজেক্ট মডেল অনুযায়ী ingালাই প্রোটোকল অনুসরণ করবে (যদি এর শ্রেণিতে সংজ্ঞায়িত করা হয় $ a থেকে ইনস্ট্যান্ট করা হয় )।

পিএইচপি অনুরূপ কিছু করে

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

(STRING) ভোটদান অপারেশন PHP5 + + কোড আরো অবজেক্ট ওরিয়েন্টেড উপার্জন প্রোগ্রামিং এর জন্য একটি প্রস্তাবিত কৌশল। আইএমও এটি জাভা / সি # / ইত্যাদি ইত্যাদির মতো অন্যান্য ওওপি ভাষার সাথে নকশার মিল (পার্থক্য) এর একটি দুর্দান্ত উদাহরণ, যেমন নিজস্ব বিশেষ পিএইচপি পদ্ধতিতে (যখনই এটি ভাল বা সার্থকতার জন্য) থাকে।


8

অন্যরা যেমন উল্লেখ করেছে, অবজেক্টগুলিকে __toStringস্ট্রিংয়ে ফেলে দেওয়ার জন্য একটি পদ্ধতি প্রয়োজন । এমন কোনও পদার্থ যা সেই পদ্ধতিটি সংজ্ঞায়িত করে না সে এখনও spl_object_hash ফাংশনটি ব্যবহার করে একটি স্ট্রিং প্রতিনিধিত্ব করতে পারে।

এই ফাংশনটি অবজেক্টটির জন্য একটি অনন্য শনাক্তকারীকে দেয়। এই আইডিটি হ্যাজ কী হিসাবে অবজেক্টগুলি সংরক্ষণ করার জন্য, বা অবজেক্টটি সনাক্ত না করার জন্য ব্যবহার করা যেতে পারে, যতক্ষণ না অবজেক্টটি ধ্বংস না হয়। একবার বস্তুটি ধ্বংস হয়ে গেলে, তার হ্যাশটি অন্য বস্তুর জন্য পুনরায় ব্যবহার করা যেতে পারে।

আমার কাছে একটি অবজেক্ট ক্লাস রয়েছে যার একটি __toStringপদ্ধতি রয়েছে যা md5(spl_object_hash($this))আউটপুটটিকে স্পষ্টভাবে অনন্য করে তুলতে কল করার চেয়ে পূর্বনির্ধারিত হয়, যেহেতু spl_object_hash থেকে আউটপুট বস্তুর মধ্যে খুব মিল দেখতে পারে।

এটি বিশেষ করে ডিবাগিং কোডের জন্য সহায়ক যেখানে কোনও ভেরিয়েবল একটি অবজেক্ট হিসাবে আরম্ভ হয় এবং পরে কোডে এটি কোনও ভিন্ন অবজেক্টে পরিবর্তিত হয়েছিল বলে সন্দেহ হয়। লগের জন্য ভেরিয়েবলগুলি কেবল প্রতিধ্বনিত করে হ্যাজ (অথবা না) অবধি বস্তুটির পরিবর্তনটি প্রকাশ করতে পারে।


6

পূর্ববর্তী উত্তরগুলির পদ্ধতিগুলির মধ্যে কিছু না হলেও ব্যর্থ হয় যখন উদ্দেশ্যযুক্ত স্ট্রিং ভেরিয়েবলের একটি নেতৃস্থানীয় শূন্য থাকে , উদাহরণস্বরূপ, 077543

এই জাতীয় একটি পরিবর্তনশীল রূপান্তর করার একটি প্রচেষ্টা উদ্দেশ্যযুক্ত স্ট্রিং পেতে ব্যর্থ হয়, কারণ ভেরিয়েবলটি বেস 8 (অষ্টাল) এ রূপান্তরিত হয় ।

এই সমস্তগুলির$str মান 32611 হবে :

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

1
এটি পিকনিক (চেয়ারে সমস্যা, কম্পিউটারে নয়) এখানে কিছুই ব্যর্থ হয় না ! 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। (পিএস: নিম্নচোটিত নয়, কারণ এই ত্রুটিটি সাধারণ)
টিনো

4

আমি মনে করি এই প্রশ্নটি কিছুটা বিভ্রান্তিমূলক, জাভাতে টস্ট্রিং () স্ট্রিংয়ে কিছু ফেলে দেওয়ার উপায় নয়। এটিই (স্ট্রিং) বা স্ট্রিং.ওয়ালুওফ () এর মাধ্যমে কাস্টিং হয় এবং এটি পিএইচপি তেও কাজ করে।

// Java
String myText = (string) myVar;

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

নোট করুন যে জাভা টাইপ-নিরাপদ হওয়ায় এটি সমস্যাযুক্ত হতে পারে ( আরও তথ্যের জন্য এখানে দেখুন )।

তবে আমি যেমন বলেছি, এটি ingালাই করা হয় এবং তাই জাভা এর টসস্ট্রিং () এর সমতুল্য নয়।

জাভাতে টসস্ট্রিং কেবল একটি স্ট্রিংতে কোনও বস্তু নিক্ষেপ করে না। পরিবর্তে এটি আপনাকে স্ট্রিং প্রতিনিধিত্ব দেবে । এবং এটিই পিএইচপি-তে স্ট্রিং () করে।

// 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"

"স্ট্রিং উপস্থাপনা" দিয়ে আমি কী বোঝাতে চাইছি? কয়েক মিলিয়ন বই সহ একটি লাইব্রেরির জন্য একটি শ্রেণীর কল্পনা করুন।

  • স্ট্রিংয়ে সেই শ্রেণিটি ফেলে দেওয়া (ডিফল্টরূপে) এখানে সমস্ত বইয়ের ডেটাগুলিকে স্ট্রিংয়ে রূপান্তরিত করা হবে যাতে স্ট্রিংটি দীর্ঘ দীর্ঘ হয় এবং বেশিরভাগ সময় খুব কার্যকর হয় না।
  • স্ট্রিংয়ের পরিবর্তে আপনাকে স্ট্রিং প্রতিনিধিত্ব দেবে, অর্থাৎ কেবল গ্রন্থাগারের নাম। এটি সংক্ষিপ্ত এবং অতএব আপনাকে কম, তবে আরও গুরুত্বপূর্ণ তথ্য দেয়।

এটি উভয়ই বৈধ পন্থা তবে খুব ভিন্ন লক্ষ্য সহ, প্রতিটি ক্ষেত্রেই একটি নিখুঁত সমাধান নয় এবং আপনার বুদ্ধিমানের সাথে বেছে নিতে হবে যা আপনার প্রয়োজনের জন্য আরও উপযুক্ত।

অবশ্যই, আরও আরও বিকল্প রয়েছে:

$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

এই সমস্ত পদ্ধতি একটি স্ট্রিং ফিরিয়ে দেবে, এর মধ্যে কয়েকটি অভ্যন্তরীণভাবে __to স্ট্রিং ব্যবহার করছে এবং কিছু অন্য অবজেক্টে ব্যর্থ হবে। কটাক্ষপাত পিএইচপি ডকুমেন্টেশন আরো বিস্তারিত জানার জন্য।


3

ডকুমেন্টেশন বলছে যে আপনি এটিও করতে পারেন:

$str = "$foo";

এটি কাস্টের মতোই, তবে আমি মনে করি এটি সুন্দর দেখায়।

সূত্র:


1

ডাবল উদ্ধৃতিগুলিতেও কাজ করা উচিত ... এটির একটি স্ট্রিং তৈরি করা উচিত, তারপরে এটি 2 টি খালি স্ট্রিংয়ের মধ্যে থাকা V মাইভারের কাস্টেড STRING মানটি সংযোজন / অন্তর্ভুক্ত করা উচিত।



1

আপনি যদি সাধারণ ধরণ বা বুলিয়ানের মতো সাধারণ কোনও কিছু রূপান্তর করেন তবে আপনি যে ধরণের রূপান্তর করতে চাইছেন তার জন্য আপনার নিজস্ব ফাংশন / পদ্ধতি লিখতে হবে, অন্যথায় পিএইচপি কেবল টাইপটি মুদ্রণ করবে (যেমন অ্যারে, গুগলস্নিফার , বা বিডেট)।


1

পিএইচপি গতিশীলভাবে টাইপ করা হয়, তাই ক্রিস ফোরনিয়ার যেমন বলেছিলেন, "আপনি যদি এটি একটি স্ট্রিংয়ের মতো ব্যবহার করেন তবে এটি স্ট্রিং হয়ে যায়"। আপনি যদি স্ট্রিংয়ের ফর্ম্যাটটিতে আরও নিয়ন্ত্রণের সন্ধান করছেন তবে মুদ্রণযোগ্য আপনার উত্তর।



1
$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()স্ট্রিংগুলিতে ব্যবহার করা সময়ের সম্পূর্ণ অপচয়।
টিনো

বউ জিনিসটি ধরে নেওয়া হচ্ছে আপনি একটি স্ট্রিংয়ের মানটি পুনরুদ্ধার করেছেন = যখন এর প্রতিক্রিয়াটি এটি "স্ট্রিং" হতে চলেছে। তবে, আপনি যখন জাভাস্ক্রিপ্টে এটি প্রদর্শন করতে চেয়েছিলেন তখন আপনাকে এটি 'স্ট্রিংএক্স' তৈরি করতে হবে
ড্যানিয়েল অ্যাডিনিউ

এটি অত্যন্ত বিপজ্জনক (বলা বাহুল্য: সাধারণভাবে ভুল)। কীভাবে নিরাপদভাবে পিএইচপি থেকে জেএস-তে কিছু পাস করতে হবে তা বুঝতে দয়া করে stackoverflow.com/q/168214 বা stackoverflow.com/q/23740548 দেখুন ! (কিছুটা অফটোপিক হওয়ার জন্য দুঃখিত: জেএসকে পিএইচপি ভেরি করা প্রশ্নের অংশ ছিল না।)
টিনো

0

বস্তুর জন্য, আপনি কাস্ট অপারেটরটি ব্যবহার করতে সক্ষম নাও হতে পারেন। পরিবর্তে, আমি json_encode()পদ্ধতিটি ব্যবহার করি ।

উদাহরণস্বরূপ, নিম্নলিখিতটি ত্রুটি লগতে সামগ্রী আউটপুট দেবে:

error_log(json_encode($args));

0

এই স্ট্যান্ডক্লাসের পাঠ্য অংশটিকে স্ট্রিং টাইপে রূপান্তর করার জন্য এই সামান্য অদ্ভুত, তবে কাজ করার চেষ্টা করুন:

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

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.