পিএইচপি-তে একক-উদ্ধৃত এবং ডাবল-কোটেড স্ট্রিংগুলির মধ্যে পার্থক্য কী?


795

আমি কিছুটা বিভ্রান্ত হয়েছি কেন আমি পিএইচপি-তে কিছু কোড দেখি কেন স্ট্রিং সহ একক উদ্ধৃতিতে এবং কখনও কখনও ডাবল উদ্ধৃতিতে থাকে।

আমি কেবল নেট। বা সি ভাষায় জানি, এটি যদি একক উদ্ধৃতিতে থাকে তবে এর অর্থ এটি একটি অক্ষর নয়, একটি স্ট্রিং।

উত্তর:


1086

পিএইচপি স্ট্রিংগুলি কেবল দুটি উপায়ে নয়, চারটি উপায়ে নির্দিষ্ট করা যায়।

  1. একক উদ্ধৃত স্ট্রিংগুলি জিনিসগুলি সম্পূর্ণ "যেমন আছে" প্রদর্শন করবে। ভেরিয়েবল এবং সর্বাধিক অব্যাহত ক্রমের ব্যাখ্যা করা হবে না will ব্যতিক্রমটি হ'ল আক্ষরিক একক উদ্ধৃতি প্রদর্শন করতে, আপনি এটি পিছনে স্ল্যাশ দিয়ে এড়াতে পারবেন\'এবং একটি পিছনের স্ল্যাশ প্রদর্শন করতে আপনি এটি অন্য ব্যাকস্ল্যাশ দিয়ে এড়াতে পারবেন\\( সুতরাং হ্যাঁ, এমনকি একক উদ্ধৃত স্ট্রিংগুলিও পার্স করা হয়েছে )।
  2. ডাবল উদ্ধৃতি স্ট্রিংগুলি পালিয়ে যাওয়া অক্ষরের একটি হোস্ট প্রদর্শন করবে (কিছু রেজিক্স সহ), এবং স্ট্রিংয়ের ভেরিয়েবলগুলি মূল্যায়ন করা হবে। এখানে একটি গুরুত্বপূর্ণ বিষয় হ'ল আপনি মূল্যায়ন করতে চান এমন ভেরিয়েবলের নামটি আলাদা করতে আপনি কোঁকড়া ধনুর্বন্ধনী ব্যবহার করতে পারেন । উদাহরণস্বরূপ বলা যাক আপনার পরিবর্তনশীল রয়েছে$typeএবং আপনি চানecho "The $types are"। এটি ভেরিয়েবলের সন্ধান করবে$types। এই ব্যবহারটি ঘিরেecho "The {$type}s are"আপনি ডলারের চিহ্নের আগে বা পরে বামবন্ধটি বন্ধন করতে পারেন। অ্যারে ভেরিয়েবল এবং এর মতো কীভাবে ব্যবহার করতে হয় তা দেখতে স্ট্রিং পার্সিং এ একবার দেখুন।
  3. হেরডোক স্ট্রিং সিনট্যাক্স ডাবল কোটেড স্ট্রিংয়ের মতো কাজ করে। এটি দিয়ে শুরু হয়<<<। এই অপারেটরের পরে, একটি সনাক্তকারী সরবরাহ করা হবে, তারপরে একটি নতুন লাইন। স্ট্রিংটি নিজেই অনুসরণ করে এবং তারপরে উদ্ধৃতি বন্ধ করতে আবার একই শনাক্তকারী। এই সিনট্যাক্সে আপনার উদ্ধৃতিগুলি এড়াতে হবে না।
  4. নওডক (পিএইচপি 5.3.0 থেকে) স্ট্রিং সিনট্যাক্স মূলত একক উদ্ধৃত স্ট্রিংয়ের মতো কাজ করে। পার্থক্যটি হ'ল এমনকি একক উদ্ধৃতি বা ব্যাকস্ল্যাশও এড়িয়ে যেতে হবে না। হেরডোকসের জন্য<<<ব্যবহৃতএকইক্রমের সাহায্যেএকটি নওডক সনাক্ত করা যায়তবে সনাক্তকারী যা অনুসরণ করে তা একক উদ্ধৃতিতে আবদ্ধ থাকে, যেমন<<<'EOT'Nowdoc এ কোনও পার্সিং করা হয় না।

নোটস: একক উদ্ধৃতিগুলির ভিতরে একক উদ্ধৃতি এবং ডাবল কোটের ভিতরে ডাবল উদ্ধৃতি অবশ্যই অব্যাহতিপ্রাপ্ত:

$string = 'He said "What\'s up?"';
$string = "He said \"What's up?\"";

গতি:
আমি একক উদ্ধৃতিতে ডাবল কোটের চেয়ে দ্রুত হওয়াতে খুব বেশি ওজন রাখব না। তারা সম্ভবত কিছু পরিস্থিতিতে দ্রুত হয়। এখানে একটি নিবন্ধটি ব্যাখ্যা করা হচ্ছে যাতে পিএইচপি ৪.৩ ( Useless Optimizationsনীচে, বিভাগের দিকে C) থেকে একক এবং ডাবল উদ্ধৃতিগুলি সমানভাবে দ্রুত হয় । এছাড়াও, এই বেঞ্চমার্ক পৃষ্ঠায় একটি একক বনাম ডাবল উদ্ধৃতি তুলনা রয়েছে। বেশিরভাগ তুলনা একই রকম। একটি তুলনা আছে যেখানে ডাবল উদ্ধৃতিগুলি একক উদ্ধৃতিগুলির চেয়ে ধীর।


17
কোঁকড়া ধনুর্বন্ধনী কৌতুক জন্য +1। সচেতন ছিল না। খুব খারাপ, এটা শেল স্ক্রিপ্ট, অর্থাত হিসাবে একই নিয়মাবলী অনুসরণ করে না ${variablename}
ডিভাইস 1

6
আমি কেবল ডাবল উদ্ধৃতি ব্যবহার করি, যখন আমার এটির প্রয়োজন \nহয়, আমার PHPকোডের অন্য কোনও কিছু একক উদ্ধৃতিতে রয়েছে।
জো স্মু

মনে হচ্ছে 'হেরেডোক' পিএইচপি-তে বাশ থেকে পোর্ট করা আছে নাকি তা নয়? যাইহোক দুর্দান্ত উত্তর, সুতরাং একটি +1 ধন্যবাদ।
sjsam

2
পিএইচপি ডকুমেন্টেশন মন্তব্যগুলিতে আকর্ষণীয় দ্রষ্টব্য: php.net/manual/en/language.types.string.php#120160 - "দ্বিগুণ-উদ্ধৃত স্ট্রিং" যা দেখতে এত ধীর look n যেহেতু তাদের they n ব্যাকস্ল্যাশ এবং $ ডলারের জন্য সমস্ত কিছু পার্স করতে হবে $ পরিবর্তনশীল সম্প্রসারণ করার লক্ষণগুলি ", পিএইচপি - পেরিওডের সবচেয়ে দ্রুততম স্ট্রিং কনকনেটেশন পদ্ধতি হিসাবে প্রমাণিত হয়েছে! আপনার স্ট্রিংটি সম্পূর্ণ আক্ষরিক হলে সিঙ্গেল-কোটগুলি কেবল তত দ্রুত হয় (এতে পার্স করার মতো কিছুই নেই এবং কিছুটা মিলে যায় না) তবে মার্জিনটি হ'ল খুব ছোট এবং কিছু যায় আসে না। "
dregad

1
দ্রষ্টব্য: "ডাবল উদ্ধৃতিগুলির স্বচ্ছলতা কেবল অতীতের একটি বিষয়। আপডেটগুলি আজকাল চরম ক্ষেত্রে সমস্ত ক্ষেত্রে ডাবল কোটগুলির প্রসেসিং যত দ্রুত হয়েছে তা বৃদ্ধি পেয়েছে।
শারিলহোহমান

211

বিষয়গুলি ডাবল কোটে মূল্যায়ন করা হয় তবে একক নয়:

$s = "dollars";
echo 'This costs a lot of $s.'; // This costs a lot of $s.
echo "This costs a lot of $s."; // This costs a lot of dollars.

1
একক উদ্ধৃতি এবং পালানো ব্যাকস্ল্যাশগুলি একক উদ্ধৃত স্ট্রিংগুলিতেও প্রসারিত।
পিটার আজতাই

43
এমন একটি ভুল যা পিএইচপি-তে নতুন অনেক বিকাশকারী চলছে: বাঁচিয়ে $mailbody = 'I want a line break:\nDone.';রাখছে \n। যেখানে: $mailbody = "I want a line break:\nDone.";লাইন ব্রেকটি বিশ্লেষণ করবে।
কাই নোক

আমার দুটি সেন্টের প্রয়োজন কেবলমাত্র সাক্ষাত্কারের জন্য বা ম্যালওয়্যার বিকাশের জন্য। কেবল দুটি এক্সপ্রেশন থেকে var_dump () তুলনা করুন: $testWithAsciiAndUtf8Characters = "\x48\x41\x4c\114\117 \u{0147}\u{012B}\u{0144}\u{014D}!"; $simpleTest = '\x48\x41\x4c\114\117 \u{0147}\u{012B}\u{0144}\u{014D}!'; অক্ষরের ক্রমগুলি $testWithAsciiAndUtf8Charactersপ্রকৃত অক্ষরের সাথে স্ট্রিংয়ে রূপান্তরিত হয়েছিল।
রোস্তিস্লাভ পাইলাইপেনকো

56

' একক উদ্ধৃত

স্ট্রিং নির্দিষ্ট করার সহজ উপায় হ'ল এটি একক উদ্ধৃতিতে সংযুক্ত করা। একক উক্তিটি সাধারণত দ্রুততর হয় এবং অভ্যন্তরের উদ্ধৃতিযুক্ত সমস্ত কিছুই সরল স্ট্রিং হিসাবে বিবেচিত হয়।

উদাহরণ:

echo 'Start with a simple string';
echo 'String\'s apostrophe';
echo 'String with a php variable'.$name;

" ডাবল উদ্ধৃত

পিএইচপি-তে ডাবল কোট ব্যবহার করুন পিরিয়ডকে পৃথক কোডের জন্য ব্যবহার করা এড়াতে (দ্রষ্টব্য: আপনি স্ট্রিংতে {}কনক্যাটেনশন ( .) অপারেটর) ব্যবহার করতে না চান তবে ভেরিয়েবলগুলি অন্তর্ভুক্ত করতে কোঁকড়া ধনুর্বন্ধনী ব্যবহার করুন ।

উদাহরণ:

echo "Start with a simple string";
echo "String's apostrophe";
echo "String with a php variable {$name}";

পিএইচপি-তে একটি ডাবল উদ্ধৃতি বনাম কোনও কর্মক্ষমতা বেনিফিট রয়েছে?

হ্যাঁ. একক উদ্ধৃতি ব্যবহার করা কিছুটা দ্রুত।

পিএইচপি একক উদ্ধৃতিতে কী রয়েছে তা ব্যাখ্যা করতে অতিরিক্ত প্রসেসিং ব্যবহার করবে না। আপনি যখন ডাবল উদ্ধৃতি ব্যবহার করেন তখন স্ট্রিংয়ের মধ্যে কোনও ভেরিয়েবল আছে কিনা তা পরীক্ষা করতে পিএইচপি কে পার্স করতে হয়।


এক একক উদ্ধৃতি না স্ট্রিং মধ্যে কিছু পার্স ব্যতিক্রম, আপনি কি ব্যবহার করতে পারেন \'স্ট্রিং মধ্যে ব্যবহারের জন্য একটি একক ঊর্ধকমা অব্যাহতি (অথবা \\'ব্যাকস্ল্যাশ প্রদর্শন করে)। নোট করুন যে traditionalতিহ্যবাহী পালানোর ক্রমগুলি যেমন \nনিউলাইন চরিত্রে পার্স হবে না। স্ট্রিংগুলিতে পিএইচপি ডক্স
শেরিলহোহমান

আমি সমস্ত জবাব দেখতে পাচ্ছি যে: আপনি ভেরিয়েবলের মান মুদ্রণ করতে ডাবল উদ্ধৃতিতে ভেরিয়েবলের নামটি ব্যবহার করতে পারেন, তবে আপনি বলছেন, সংক্ষিপ্ত ব্যবহারের প্রয়োজনীয়তা এড়াতে ভেরিয়েবলের নামটিও কোঁকড়ানো ধনুর্বন্ধনী মধ্যে আবদ্ধ করা উচিত সময়কাল। সুতরাং যদি "$ my_var" এবং "{$ my_var}" আউটপুট $ my_var এর মান উভয় হয়, তবে বন্ধনীগুলি কী? ধন্যবাদ!
বাহমান.এ

40

একটি একক-উদ্ধৃত স্ট্রিং এর ব্যাখ্যার মধ্যে ভেরিয়েবল নেই। একটি দ্বিগুণ উদ্ধৃত স্ট্রিং করে।

এছাড়াও, একটি ডাবল-কোটেড স্ট্রিংটিতে ব্যাকস্ল্যাশ ছাড়াই অ্যাডোস্ট্রোফ থাকতে পারে, যখন একক-উদ্ধৃত স্ট্রিংটিতে আনসকেপড উদ্ধৃতি চিহ্ন থাকতে পারে।

একক-উদ্ধৃত স্ট্রিং রানটাইমগুলিতে দ্রুত হয় কারণ তাদের পার্স করার প্রয়োজন হয় না।


8
একক উদ্ধৃত স্ট্রিংগুলিও কম স্মৃতি ব্যবহার করে। পিএইচপি-তে স্ট্রিংগুলি হ্যান্ডেল করার দ্রুততম উপায় হ'ল একক উদ্ধৃতি এবং ব্যবহার। অপারেটর স্ট্রিং এবং ভেরিয়েবল একত্রিত করতে।
রিবাল্ডেডি

হুম, আমি ভুল হলে আমাকে সংশোধন করুন তবে পিএইচপি-র জন্য ভাষাটি সি সঠিক? তারপরে কেন স্ট্রিং কোটগুলি পিএইচপি এবং সিতে পৃথক হয়?
রবি ওয়ামিনাল

1
@ আরব ওয়ামিনাল: পিএইচপি সি তে প্রয়োগ করা যেতে পারে তবে এটি আলাদা ভাষা। পিএইচপি ভাষা এই শব্দার্থক নির্দিষ্ট করে।
বোরিলিড

@ রিবল্ড - এখন কি সিনট্যাক্স দ্রুত হবে না? একক উদ্ধৃত স্ট্রিংগুলি পালিয়ে যাওয়া একক উদ্ধৃতি এবং ব্যাকস্ল্যাশগুলির জন্য পার্স করা হয়েছে।
পিটার আজতাই

@ পিটার, আপনি সঠিক হতে পারেন, আমি এটির মধ্যে সত্যিই খোঁজখুঁজি করি নি। পিএইচপি ডকুমেন্টেশন গতির দাবি করে, আমি বিশ্বাস করি ডক্সগুলিকে বিশ্বাস করব। :)
রিবল্ড এডি

27

পিএইচপি ইন, উভয় 'my name'এবং "my name"স্ট্রিং হয়। আপনি পিএইচপি ম্যানুয়াল এ সম্পর্কে আরও পড়তে পারেন ।

আপনার জানা উচিত ছিল

$a = 'name';
$b = "my $a"; == 'my name'
$c = 'my $a'; != 'my name'

পিএইচপি, মানুষ একটি ধ্রুবক স্ট্রিং সংজ্ঞায়িত করতে একক উদ্ধৃতি ব্যবহার করেন, মত 'a', 'my name', 'abc xyz', ডবল উদ্ধৃতি ব্যবহার করার সময় একটি স্ট্রিং সংজ্ঞায়িত করতে আইডেন্টিফায়ার মত ধারণ করে "a $b $c $d"

এবং অন্য জিনিসটি হ'ল

echo 'my name';

তুলনায় দ্রুত

echo "my name";

কিন্তু

echo 'my ' . $a;

তুলনায় ধীর

echo "my $a";

স্ট্রিংয়ের অন্যান্য ব্যবহৃত ক্ষেত্রে এটি সত্য।


18

একক, ডাবল, হেরিডোক এবং নওডোকের উদ্ধৃতিগুলির উদাহরণ

<?php

    $fname = "David";

    // Single quotes
    echo 'My name is $fname.'; // My name is $fname.

    // Double quotes
    echo "My name is $fname."; // My name is David.

    // Curly braces to isolate the name of the variable
    echo "My name is {$fname}."; // My name is David.

    // Example of heredoc
    echo $foo = <<<abc
    My name is {$fname}
    abc;

        // Example of nowdoc
        echo <<< 'abc'
        My name is "$name".
        Now, I am printing some
    abc;

?>

16

পিএইচপি-তে, একক উদ্ধৃতি পাঠ্যটিকে স্ট্রিংয়ের মান হিসাবে বিবেচনা করা হয় এবং ডাবল উদ্ধৃতি পাঠ্যটি তাদের মানটি প্রতিস্থাপন ও প্রক্রিয়াজাতকরণের মাধ্যমে ভেরিয়েবলগুলি পার্স করবে।

$test = "variable";
echo "Hello Mr $test"; // the output would be: Hello Mr variable
echo 'Hello Mr $test'; // the output would be: Hello Mr $test

এখানে, ডাবল উদ্ধৃতি মানটিকে বিশ্লেষণ করে এবং একক উদ্ধৃতিটিকে স্ট্রিংয়ের মান হিসাবে বিবেচনা করা হয় ( $testভেরিয়েবলটিকে পার্সিং না করেই ))


12

উভয় ধরণের বদ্ধ অক্ষর স্ট্রিং। এক প্রকারের উদ্ধৃতিটি অন্যান্য প্রকারের উদ্ধৃতিটি সুবিধার সাথে ব্যবহার করা হয়। "'" এবং '"'। কোটের প্রকারের মধ্যে সবচেয়ে বড় পার্থক্য হ'ল সংযুক্ত সনাক্তকারীর রেফারেন্সগুলি ডাবল কোটের অভ্যন্তরের জন্য প্রতিস্থাপিত হয় তবে একক উদ্ধৃতিতে নয়।


3

পিএইচপি-তে সিঙ্গল কোট এবং ডাবল কোট ব্যবহার করার পার্থক্য হ'ল আমরা যদি ইকো স্টেটমেন্টে একক উদ্ধৃতি ব্যবহার করি তবে এটি স্ট্রিং হিসাবে বিবেচিত হবে। ... তবে আমরা যদি ডাবল উদ্ধৃতিতে ভেরিয়েবলের নাম লিখি তবে এটি স্ট্রিংয়ের সাথে সেই ভেরিয়েবলের মান আউটপুট করবে।



-1

একটি জিনিস:

এটি লক্ষ করা খুব গুরুত্বপূর্ণ যে হেরাদোকের সমাপ্তি শনাক্তকরণকারী রেখার সাথে একটি সেমিকোলন (;) ব্যতীত অন্য কোনও অক্ষর থাকতে হবে না । এর অর্থ বিশেষত যে শনাক্তকারী ইন্ডেন্টেড নাও হতে পারে এবং সেমিকোলনের আগে বা পরে কোনও স্পেস বা ট্যাব থাকতে পারে না ।

উদাহরণ:

   $str = <<<EOD
Example of string
spanning multiple lines
using heredoc syntax.
EOD;

1
এটি একটি সত্য বিবৃতি, তবে এখানে প্রশ্নের সাথে কিছু করার নেই।
miken32

-1

সম্ভবত আমি কিছুটা দেরি করেছি, এবং কিছুটা অফ-টপিক, তবে এখানে এটি যাইহোক:

আপনার স্ট্রিংয়ের বিষয়বস্তু:
alert("It's \"game\" time.");বা এর মধ্যে থাকার কারণে আপনাকে অবশ্যই পছন্দ করতে হবে নাalert('It\'s "game" time.');

আপনি যদি ইংরাজী উক্তি চিহ্নগুলির ব্যবহার এবং অ্যাডোস্ট্রোফের জন্য সঠিক চরিত্রের সাথে পরিচিত হন তবে আপনি দ্বিগুণ বা একক উদ্ধৃতি ব্যবহার করতে পারেন, কারণ এটির কোনও ব্যাপার হবে না:
alert("It’s “game” time.");এবংalert('It’s “game” time.');

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