পিএইচপি - স্ট্রিংতে কনকেনেটেট বা সরাসরি ভেরিয়েবল সন্নিবেশ করান


224

আমি ভাবছি, পিএইচপি ভেরিয়েবলগুলি স্ট্রিংয়ে inোকানোর উপযুক্ত উপায় কী?

এই পথে:

echo "Welcome ".$name."!"

বা এইভাবে:

echo "Welcome $name!"

এই দুটি পদ্ধতিই আমার কাজ করে PHP v5.3.5। দ্বিতীয়টি সংক্ষিপ্ত এবং সহজ তবে আমি নিশ্চিত নই যে প্রথমটি আরও ভাল ফর্ম্যাটিং করা হয়েছে বা আরও যথাযথ হিসাবে গ্রহণযোগ্য।


18
আপনি যদি প্রথমটি করছিলেন তবে আমি ব্যক্তিগতভাবে একক উক্তি পছন্দ করিecho 'Welcome '.$name.'!';
কেজেওয়াই নাম ame


2
@ kjy112 আমি আমার উত্তরে একই কথা বলেছি, আমি একক উদ্ধৃতিগুলির একটি বিশাল অনুরাগ: এক্স
খেজ

11
ব্যক্তিগতভাবে, আমি পুরো "একক উক্তিগুলি আরও দক্ষ" এড়িয়ে চলেছি এবং কেবল "যে কোনও উদ্ধৃতি শৈলীর জন্য অভ্যন্তরীণ প্রস্থানের শেষ পরিমাণ প্রয়োজন" ব্যবহার করুন for আপনার স্ট্রোকের তুলনায় কম স্ট্রিং পার্সিংয়ের কারণে আপনার লেখা কোনও কোড যে কোনও মাইক্রোস্কোপিক লাভ থেকে উপকৃত হবে এটি অত্যন্ত সম্ভাবনা।
মার্ক বি

1
পারফরম্যান্স ক্ষতির দাবিটি মিথ্যা। এই নিবন্ধটি রেফারেন্স হিসাবে দেখুন: nikic.github.io/2012/01/09/…
দামিয়ান

উত্তর:


344

এই দুটি সিনট্যাক্সের মধ্যে আপনার পছন্দসইটি বেছে নেওয়া উচিত :-)

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

ফলাফল একই হবে; এমনকি যদি পারফরম্যান্সের অন্তর্নিহিততা থাকে তবে সেগুলি 1 এর জন্য গুরুত্বপূর্ণ নয়


সিডনোট হিসাবে, তাই আমার উত্তরটি আরও কিছুটা সম্পূর্ণ: যেদিন আপনি এই জাতীয় কিছু করতে চাইবেন:

echo "Welcome $names!";

পিএইচপি আপনার কোডটি এমনভাবে ব্যাখ্যা করবে যেন আপনি $namesচলকটি ব্যবহার করার চেষ্টা করছেন - যা বিদ্যমান নেই doesn't - মনে রাখবেন যে এটি শুধুমাত্র তখনই কাজ করবে যদি আপনি আপনার স্ট্রিংয়ের জন্য "" "না" ব্যবহার করেন।

সেদিন, আপনাকে ব্যবহার করতে হবে {}:

echo "Welcome {$name}s!"

সংক্ষেপে ফ্যালব্যাকের দরকার নেই।


আপনার প্রথম বাক্য গঠন:

echo "Welcome ".$name."!";

সম্ভবত যুক্তিগুলি এড়িয়ে, অনুকূলিত করা যেতে পারে :

echo "Welcome ", $name, "!";

(তবে, যেমনটি আমি আগেই বলেছি, এতে বেশি কিছু যায় আসে না ...)


1 - যদি না আপনি কয়েক হাজার লক্ষ লক্ষ বনাম বিরক্তিগুলি করেন - এবং সম্ভবত এটি বেশিরভাগ ক্ষেত্রে নয়।


3
চমৎকার আপনাকে ধন্যবাদ! এটি জেনে খুব সুন্দর যে আমি এটি আমার স্ট্রিংয়ের মধ্যে সরাসরি সন্নিবেশ করার প্রিয় পদ্ধতিটি ব্যবহার করতে পারি, এবং প্রয়োজনীয় স্ট্রিংটি ব্যবহারের প্রয়োজনে কীভাবে বাকী স্টিং থেকে পৃথক করা যায় তা জানতে পেরে আমি এখনই অত্যন্ত কৃতজ্ঞ {}
ওয়েব_ডিজাইনার

64
কেবল একটি নোট যে স্ট্রিং আক্ষরিক এবং ভেরিয়েবলকে কমা দিয়ে আলাদা করা কেবল echoঅন্য কোথাও নয়, এর সাথে কাজ করে ।
কলিঙ্কামেরন

3
কেবল পারফরম্যান্সের দিকে ইঙ্গিত করে: time php -r '$string=""; for ($i=0;$i<199999;$i++){ $string = $string.$i; } print("Done!\n");'(কনটেনটেশন) আসলে প্রায় 300 মিলিসেকেন্ডে হারাবে (200.000 আইটেমের জন্য, এটি আপনার সেটের হাজার উপাদানগুলিতে 1 মিলিসেকনফ ...)। এটি পরিসংখ্যানের শব্দ, এটি কোনও পার্থক্য পরিমাপ করাও অসম্ভব। এটি আরও পাঠযোগ্য, বিবেচনা করে time php -r '$string=""; for ($i=0;$i<199999;$i++){ $string = "{$string}{$i}"; } print("Done!\n");'(ইন্টারপোলেশন) অবিসংবাদিত বিজয়ী ...
ফার্নান্দো কর্ডেরিও

1
ইন্টারপোলেশন ব্যবহার করতে চাইলে আপনাকে ডাবল উদ্ধৃতি ব্যবহার করতে হবে।
ম্যাক্সিমা আলেক্জ

স্ট্রিংয়ের ভিতরে ফাংশন ব্যবহার করা কি সম্ভব? প্রতিধ্বনির মতো "এটি {foo ()} সুন্দর"; ?
strix25

17

ডাবল-কোটেড স্ট্রিংগুলি আরও মার্জিত কারণ কারণ প্রতিবার আপনার ভেরিয়েবল সন্নিবেশ করার সময় আপনার স্ট্রিংটি ভেঙে ফেলতে হবে না (যেমন আপনাকে একক-উদ্ধৃত স্ট্রিংগুলির সাথে অবশ্যই করতে হবে)।

তবে, যদি আপনাকে কোনও ফাংশনের রিটার্ন মান সন্নিবেশ করা প্রয়োজন, তবে এটি একটি ডাবল-কোটেড স্ট্রিংয়ের মধ্যে sertedোকানো যাবে না - এমনকি যদি আপনি এটি বন্ধনী দিয়ে ঘিরে থাকেন তবে!

//syntax error!!
//$s = "Hello {trim($world)}!"

//the only option
$s = "Hello " . trim($world) . "!";

10
আপনি পিএইচপি 5.3 ভেরিয়েবল ফাংশনগুলির মাধ্যমে স্ট্রিংগুলিতে আধা-পরোক্ষভাবে ফাংশনগুলি সন্নিবেশ করতে পারেন। $x = function() { ...}; $string = "hello {$x(blah blah blah)}", যা "সীমাবদ্ধতা" ঘিরে কাজ করে।
মার্ক বি

5
@ মার্ক এটি দুর্দান্ত, আমি জানতাম না! আপনি একটি বিদ্যমান ফাংশনের নামটি ভেরিয়েবলের কাছেও অর্পণ করতে এবং একই জিনিসটি করতে পারেন:$x = 'trim'; $string = "hello {$x('blah blah blah')}";
মাইকেল

3
এটি দুর্দান্ত তবে অত্যন্ত অপঠনযোগ্য, সুতরাং যে কোনওভাবে এটি এড়াতে হবে।
আপনার সাধারণ সংবেদন

2
$s = 'Hello ' . trim($world) .'!';স্ট্রিংয়ে ইন্টারপোল্ট করার মতো কিছু নেই যখন একক উদ্ধৃতি ব্যবহার করার চেষ্টা করুন performanceএটি পারফরম্যান্সের উন্নতি করবে এবং উভয়কে সনাক্ত করার জন্য একটি সম্মেলন হিসাবে ব্যবহার করা যেতে পারে
সারথ সাদাসিভান পিল্লাই

9

যেহেতু পিপিপি 4 আপনি স্ট্রিং ফরমেটার ব্যবহার করতে পারেন:

$num = 5;
$word = 'banana';
$format = 'can you say %d times the word %s';
echo sprintf($format, $num, $word);

সূত্র: স্প্রিন্টফ ()


এখন পর্যন্ত সবচেয়ে নিরাপদ বিকল্প। ভাল অনুশীলন এবং অন্যান্য ভাষার সাথে মেলে সাধারণ সম্মেলনের জন্য +1
জাভিয়ের আরিয়াস


5

তৈরি করার দৃষ্টিকোণ থেকে সহজ , পঠনযোগ্য , ধারাবাহিক এবং সহজে বোঝার পক্ষে বিবেচনা করে (যেহেতু এখানে পারফরম্যান্স গুরুত্বপূর্ণ নয়):

  • ডাবল কোটে এম্বেড ওয়ার্স ব্যবহার করা জটিল ও বিভ্রান্তিকর পরিস্থিতিতে ডেকে আনতে পারে যখন আপনি অবজেক্টের বৈশিষ্ট্য, বহুমাত্রিক অ্যারে ইত্যাদি এম্বেড করতে চান তবে এটি সাধারণত এমবেডেড ভার্স পড়ার সময় আপনি যা পড়ছেন তার চূড়ান্ত আচরণ সম্পর্কে তাত্ক্ষণিকভাবে 100% নিশ্চিত হতে পারবেন না ।

  • আপনার ঘন ঘন ক্র্যাচগুলি যুক্ত করা দরকার যেমন {}এবং এবং \, যা আইএমও বিভ্রান্তি যুক্ত করে এবং আরও ভাল না হলে কনটেক্সটেশন পাঠযোগ্যতা প্রায় সমতুল্য করে তোলে।

  • যত তাড়াতাড়ি আপনার ভারের চারপাশে কোনও ফাংশন কল মোড়ানোর প্রয়োজন হবে, উদাহরণস্বরূপ htmlspecialchars($var), আপনাকে কনট্যাক্টেশনটিতে স্যুইচ করতে হবে।

  • আফাইক, আপনি ধ্রুবকগুলি এম্বেড করতে পারবেন না।

কিছু নির্দিষ্ট ক্ষেত্রে, "ভার্স এম্বেডিং সহ ডাবল কোটস" দরকারী হতে পারে তবে সাধারণভাবে বলতে গেলে আমি মনগড়াতে যাব (সুবিধাজনক হলে একক বা ডাবল উদ্ধৃতি ব্যবহার করে)


5

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


3

প্রথমটির সাথে যান এবং একক উদ্ধৃতি ব্যবহার করুন!

  1. এটি পড়া সহজ, অর্থাত অন্যান্য প্রোগ্রামাররা কী ঘটছে তা জানতে পারবেন
  2. এটি সামান্য দ্রুত কাজ করে, পিএইচপি যখন আপনার উত্স কোডটি বিচ্ছিন্ন করে, তখন ওপকোডগুলি যেভাবে তৈরি হয়, এটি মূলত যেভাবেই করা যায় তাই এটি একটি সহায়ক হাত দিন!
  3. আপনি যদি ডাবল কোটের পরিবর্তে একক উদ্ধৃতি ব্যবহার করেন তবে আপনি আপনার কর্মক্ষমতা আরও বাড়িয়ে তুলবেন।

শুধুমাত্র পরিস্থিতিতে যখন আপনি উদ্ধৃতি চিহ্ন ব্যবহার করা উচিত, যখন আপনার প্রয়োজন হয় \r, \n, \t! ওভারহেড এটি অন্য কোনও ক্ষেত্রে এটি ব্যবহারের জন্য উপযুক্ত নয়।

জিনিসগুলি করার বিভিন্ন পদ্ধতিতে কিছু মানদণ্ডের জন্য আপনার পিএইচপি ভেরিয়েবল কনটেনটেশন , phpbench.com পরীক্ষা করা উচিত ।


19
-1: একক উদ্ধৃতি ব্যবহার করে যা কিছু হোক না কেন তার পারফরম্যান্সে কোনও বাস্তবজীবনের প্রভাব নেই। লিঙ্কযুক্ত পৃষ্ঠাটি মাইক্রোসেকেন্ডগুলিতে দুটি পদ্ধতির মধ্যে পার্থক্য দেখায় , এটি 0.000001 সেকেন্ড। যে কোনও ডাটাবেস ক্যোয়ারী সেই সময়টি কয়েকশ বার নিতে চলেছে। এই বিতর্কটি সম্পূর্ণ অর্থহীন is
পেক্কা

উল্লেখ করার জন্য ভাল পয়েন্ট \r, \nএবং \tঅন্যান্য উত্তর হিসাবে এই বিট অন্তর্ভুক্ত করা হয়নি।
অশুভরিকো

2

এটি কেবল স্বাদের বিষয়।
আপনি যা ইচ্ছা ব্যবহার করুন।

বেশিরভাগ সময় আমি দ্বিতীয় ব্যবহার করি তবে এটি নির্ভর করে।

আমাকে নিজেও একটি ভাল সম্পাদক পেতে পরামর্শ দিন যা একটি স্ট্রিংয়ের অভ্যন্তরে পরিবর্তনশীল হাইলাইট করবে


প্রয়োজনে টেক্সারিও পেয়ে গেলাম। পিএসপ্যাড শিলা।
ওয়েব_ডিজাইনার

2

সংলগ্ন না। এটির দরকার নেই, প্রতিধ্বনি হিসাবে আমাদের কমাগুলি একাধিক পরামিতি নিতে পারে

echo "Welcome ", $name, "!";

একক বা ডাবল উদ্ধৃতি ব্যবহারের বিষয়ে পার্থক্য নগণ্য, আপনি নিজের জন্য পরীক্ষা করতে বড় সংখ্যক স্ট্রিং দিয়ে পরীক্ষা করতে পারেন।


6
যদিও এটি কেবল প্রতিধ্বনির ক্ষেত্রে প্রযোজ্য। একটি চলক কার্যভারের জন্য এটি ব্যবহার করে দেখুন এবং আপনার কোডটি ফুটিয়ে তোলেন।
মার্ক বি

1

আপনার প্রথমটি বেছে নেওয়া উচিত। প্রথম পারফরম্যান্স ছাড়া দ্বিতীয়টির তুলনায় দ্রুততম তাদের পার্থক্য নেই।

ডাবল উদ্ধৃতিটির মধ্যে যদি ভেরিয়েবল পিএইচপি পরিবর্তনশীল পার্স করতে সময় নেয়।

এই একক উদ্ধৃতিগুলি বা ভেরিয়েবল কনটেনটেশনের জন্য ডাবল উদ্ধৃতিগুলি দেখুন?

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

আমি বুঝতে পারিনি কেন উপরের লিঙ্কে এই উত্তরটি উত্সাহিত হবে এবং কেন এই উত্তরটি নিম্নচোটিত হল।

যেমনটি আমি বলেছিলাম

আপনি এখানেও দেখতে পারেন

পিএইচপি, একক বা ডাবল উদ্ধৃতিতে দ্রুত কী?


5
অকাল অপ্টিমাইজেশনের জন্য -1। আপনি এক স্ক্রিপ্টে কয়েক মিলিয়ন বার মুদ্রণ না করে পারফরম্যান্সের পার্থক্য যথেষ্ট নয় - এবং তারপরেও, অন্য যে কোনও প্রক্রিয়াজাতকরণ আপনি সেকেন্ডের অতিরিক্ত কয়েক বার বামন করবেন যা আপনি অন্যটির পরিবর্তে একভাবে মুদ্রণ করতে ব্যয় করতে পারেন might । তাদের মধ্যে প্রধান পার্থক্য হ'ল পাঠযোগ্যতা (যা আমাকে দ্বিতীয় শৈলীতে অগ্রাধিকার দেয়)।
সিএইচও

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

পারফরম্যান্স ক্ষতি হ'ল +1 @ সিএইচও। এটি প্রমাণ করে মেট্রিক সহ একটি নিবন্ধ এখানে। nicic.github.io/2012/01/09/…
দামিয়ান

1

যদি আপনি কোনও SQLকমান্ড কার্যকর করতে চান এবং আপনার ভেরিয়েবলগুলি অ্যারে সদস্য হয়, তবে আপনাকে []অ্যারের ভিতরে একক উদ্ধৃতি ব্যবহার করা উচিত নয় (যেমন ['']:); উদাহরণস্বরূপ আপনি যদি এই স্ট্রিংটি এসকিউএল কমান্ড হিসাবে ব্যবহার করেন তবে আপনি পাবেন server error 500:

$con = mysqli_connect('ServerName', 'dbUsername', 'dbPassword');
mysqli_select_db($con, 'dbName')

//'ID' is auto increment field.
$sql = "INSERT INTO sampleTable (ID, TraceNo) VALUES ('','$sampleArray['TraceNo']')";
mysqli_query($con, $sql)

সঠিক স্ট্রিংটি হ'ল:

//'ID' is auto increment field.
$sql = "INSERT INTO sampleTable (ID, TraceNo) VALUES ('','$sampleArray[TraceNo]')";

পরিবর্তে আপনার পিডিও ব্যবহার করা উচিত
s3c

0

আমি জানি এটি একটি পুরানো প্রশ্ন, তবে আমি মনে করি যে কারও কাছে সমস্ত উপকারিতা এবং বিধিগুলি উল্লেখ করতে হবে:

আরও ভাল সিনট্যাক্স : এটি ব্যক্তিগত পছন্দ।

পারফরম্যান্স : কোনও পার্থক্য নেই। যেমনটি উল্লিখিত রয়েছে, অবাস্তবভাবে অনেকগুলি চলক ব্যবহার করা হলে ডাবল-কোট দ্রুততর হতে পারে।

আরও ভাল ব্যবহার : একক উদ্ধৃতি (বেশিরভাগ)। হিসাবে @Khez বলেন, একক উদ্ধৃতি সঙ্গে আপনি কিছু, এমনকি ফাংশন কল ও পরিবর্তনশীল পরিবর্তন কনক্যাটেনেট করতে পারেন যাতে মত: echo 'hi ' . trim($name) . ($i + 1);। শুধু ডাবল উদ্ধৃতি যে একক উদ্ধৃতি ব্যবহার করতে পারবেন না ব্যবহার হয় কি করতে পারেন \n, \r, \tএবং একইভাবে।

পঠনযোগ্যতা : কোনও পার্থক্য নেই (ব্যক্তিগত পছন্দ প্রযোজ্য হতে পারে)।

লিখনযোগ্যতা / পুনর্লিখনযোগ্যতা / ডিবাগিং : 1-লাইন বিবৃতিতে কোনও পার্থক্য নেই, তবে একাধিক লাইনের সাথে ডিল করার সময়, ডিবাগিং বা লেখার সময় মন্তব্য / অসচেতন লাইনগুলি সহজতর। উদাহরণ স্বরূপ:

$q = 'SELECT ' .
     't1.col1 ' .
     ',t2.col2 ' .
   //',t3.col3 ' .
     'FROM tbl1 AS t1 ' .
     'LEFT JOIN tbl2 AS t2 ON t2.col2 = t1.col1 ' .
   //'LEFT JOIN tbl3 AS t3 ON t3.col3 = t2.col2 ' .
     'WHERE t1.col1 = ' . $x . ' ' .
     '  AND t2.col2 = ' . $y . ' ' .
   //'  AND t3.col3 = ' . $z . ' ' .
     'ORDER BY t1.col1 ASC ' .
     'LIMIT 10';

কম পালানো : একক উদ্ধৃতি। একক উদ্ধৃতির জন্য আপনার কেবলমাত্র দুটি অক্ষর ( 'এবং \) এড়িয়ে চলতে হবে । ডবল উদ্ধৃতি জন্য আপনি 2 অক্ষর (অব্যাহতি প্রয়োজন ", \) এবং আরও 3 টি প্রয়োজনে ( $, {এবং })।

কম পরিবর্তন : একক উদ্ধৃতি। উদাহরণস্বরূপ আপনার যদি নিম্নলিখিত কোড থাকে:

echo 'Number ' . $i . '!';

এবং আপনার 1 থেকে $ i বৃদ্ধি করা দরকার, সুতরাং এটি পছন্দগুলি হয়ে যায়:

echo 'Number ' . ($i + 1) . '!';

তবে ডাবল উক্তিটির জন্য আপনাকে এটি পরিবর্তন করতে হবে:

echo "Number $i!";

এটি:

echo "Number " . ($i + 1) . "!";

উপসংহার : আপনি যা পছন্দ করেন তা ব্যবহার করুন

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