পিএইচপি মধ্যে স্ট্রিং মধ্যে কোঁকড়া ধনুর্বন্ধনী


190

{ }পিএইচপি-র স্ট্রিং লিটারালগুলিতে (কোঁকড়ানো ধনুর্বন্ধনী) এর অর্থ কী ?



@ কোসিমোডোর ঘূর্ণিঝড় এটি সম্পূর্ণ আলাদা প্রশ্ন এবং এটি সদৃশ হিসাবে বিবেচনা করা উচিত নয়।
ডুউ ডি হান

উত্তর:


281

এটি স্ট্রিং ইন্টারপোলেশনের জন্য জটিল (কোঁকড়ানো) সিনট্যাক্স । ম্যানুয়াল থেকে:

জটিল (কোঁকড়ানো) বাক্য গঠন

সিনট্যাক্স জটিল বলে এটিকে জটিল বলা হয় না, তবে এটি জটিল এক্সপ্রেশনগুলির ব্যবহারের অনুমতি দেয়।

স্ট্রিং প্রতিনিধিত্ব সহ কোনও স্কেলার ভেরিয়েবল, অ্যারে উপাদান বা বস্তুর সম্পত্তি এই সিনট্যাক্সের মাধ্যমে অন্তর্ভুক্ত করা যেতে পারে। কেবলমাত্র যেমন স্ট্রিং বাহিরে প্রদর্শিত হবে অভিব্যক্তি একই ভাবে লিখুন, এবং তারপর এটি মোড়ানো {এবং }। যেহেতু {পলান করা যাবে না, এই সিনট্যাক্স শুধুমাত্র যখন স্বীকৃত হবে $অবিলম্বে অনুসরণ করে {{\$আক্ষরিক পেতে ব্যবহার করুন {$। এটি পরিষ্কার করার জন্য কয়েকটি উদাহরণ:

<?php
// Show all errors
error_reporting(E_ALL);

$great = 'fantastic';

// Won't work, outputs: This is { fantastic}
echo "This is { $great}";

// Works, outputs: This is fantastic
echo "This is {$great}";
echo "This is ${great}";

// Works
echo "This square is {$square->width}00 centimeters broad."; 


// Works, quoted keys only work using the curly brace syntax
echo "This works: {$arr['key']}";


// Works
echo "This works: {$arr[4][3]}";

// This is wrong for the same reason as $foo[bar] is wrong  outside a string.
// In other words, it will still work, but only because PHP first looks for a
// constant named foo; an error of level E_NOTICE (undefined constant) will be
// thrown.
echo "This is wrong: {$arr[foo][3]}"; 

// Works. When using multi-dimensional arrays, always use braces around arrays
// when inside of strings
echo "This works: {$arr['foo'][3]}";

// Works.
echo "This works: " . $arr['foo'][3];

echo "This works too: {$obj->values[3]->name}";

echo "This is the value of the var named $name: {${$name}}";

echo "This is the value of the var named by the return value of getName(): {${getName()}}";

echo "This is the value of the var named by the return value of \$object->getName(): {${$object->getName()}}";

// Won't work, outputs: This is the return value of getName(): {getName()}
echo "This is the return value of getName(): {getName()}";
?>

প্রায়শই, এই বাক্য গঠনটি অপ্রয়োজনীয়। উদাহরণস্বরূপ, এটি:

$a = 'abcd';
$out = "$a $a"; // "abcd abcd";

ঠিক এর মতোই আচরণ করে:

$out = "{$a} {$a}"; // same

সুতরাং কোঁকড়া ধনুর্বন্ধনী অপ্রয়োজনীয়। তবে এটি :

$out = "$aefgh";

আপনার ত্রুটি স্তরের উপর নির্ভর করে, হয় কাজ করবে না বা ত্রুটি তৈরি করবে কারণ কোনও ভেরিয়েবলের নাম নেই $aefgh, তাই আপনাকে এটি করতে হবে:

$out = "${a}efgh"; // or
$out = "{$a}efgh";

40
অনুলিপি / অনুলিপি সম্পর্কে খুব বেশি মলদ্বার যদি এটি বোঝা / সন্ধান করা সহজ করে তোলে তবে এটি একটি ভাল সিদ্ধান্ত ছিল। আমার কাছ থেকে +1, এটি আমি যা খুঁজছিলাম ঠিক তা-ই হয়েছিল এবং আমি পিএইচপি ম্যানুয়ালটিতে এটি পাইনি - সম্ভবত কারণ তারা এটিকে যথাযথ নামে ডাকে বা যাই হোক না কেন call তবে আমি এটি এখানে খুঁজে পেয়েছি।
গ্যাব্রিয়েল মাগানা

9
আক্ষরিক curlies জন্য, তাদেরকে দ্বিগুণ আপ উদাঃ $vars='x:3,y:9'; $json="{{$vars}}";কিগুয়াং এর নিবন্ধটি ধন্যবাদ ।
বব স্টেইন

... বা $out = '$aefgh'; (আপনার যদি আক্ষরিক অর্থেই $এফগের প্রয়োজন হয়)
রোকো সি

আকর্ষণীয় ব্যবহারের ক্ষেত্রে উদাহরণটি SimpleXMLElement: {}নোডটি নিজেই অ্যাক্সেস করতে ব্যবহৃত হয়, যেমন $element[0]->{0}। যেহেতু সম্পত্তি "0" বিদ্যমান থাকতে পারে না, এটি __get/ __setপদ্ধতিটি ট্রিগার করবে । সংক্ষেপে এটি আপনাকে ArrayAccessসূচক অ্যাক্সেসের বিকল্পের অনুমতি দেয়, যেমন 3v4l.org/1F254
গাজুস

2
আক্ষরিক কোঁকড়া ধনুর্বন্ধনী ভিতরে একটি কন্টেন্ট ভেরিয়েবল খুব থাকে তবে তারপর কোঁকড়া-ধনুর্বন্ধনী যোগ প্রত্যেক পরিবর্তনশীল: $min=1;$max=5; echo ".{{$min},{$max}}"উৎপাদনের .{1,5}(আমি যেখানে থেকে "ডবল [কোঁকড়া ধনুর্বন্ধনী] আপ" বুদ্ধিমান যন্ত্রণার ছিল @ BobStein এর মন্তব্যে mentionned)
Xenos

47

আমার হিসাবে, কোঁকড়ানো ধনুর্বন্ধনী ধনুর্বন্ধনী জন্য বিকল্প হিসাবে পরিবেশন, তারা টাইপ করা দ্রুত এবং কোড আরও ভাল দেখায়। ডাবল কোট ("") ব্যবহার করার জন্য তাদের বিষয়বস্তু পিএইচপি দ্বারা বিশ্লেষণ করা মনে রাখবেন , কারণ একক উদ্ধৃতিতে ('') আপনি ভেরিয়েবলের আক্ষরিক নাম পাবেন :

<?php

 $a = '12345';

// This works:
 echo "qwe{$a}rty"; // qwe12345rty, using braces
 echo "qwe" . $a . "rty"; // qwe12345rty, concatenation used

// Does not work:
 echo 'qwe{$a}rty'; // qwe{$a}rty, single quotes are not parsed
 echo "qwe$arty"; // qwe, because $a became $arty, which is undefined

?>

1
"তাদের বিষয়বস্তু পিএইচপি দ্বারা বিশ্লেষণ করা হয়েছে" - এটি বিভ্রান্তিকর। আপনি কেবল কোঁকড়া ধনুর্বন্ধনী সিনট্যাক্সের মধ্যে স্বেচ্ছাসেবক পিএইচপি এক্সপ্রেশন রাখতে পারবেন না , এটিই আমি আপনার উদ্ধৃতিটি বোঝাতে চাই।
মার্ক আমেরিকা

1
আইএমও, সামগ্রিকভাবে, বন্ধনীগুলি দিয়ে টাইপ করা দ্রুত নয়। SHIFTডাবল উদ্ধৃতি এবং কোঁকড়া বন্ধনীগুলির জন্য আপনাকে কী প্রেস করতে হবে । আপনি যদি ডাবল উদ্ধৃতিটি কঠোরভাবে ব্যবহার করেন তবে তা আরও দ্রুত হবে।
অপহরণ

2
ডাবল উদ্ধৃতি বনাম একক উদ্ধৃতি হাইলাইট করার জন্য আপনাকে ধন্যবাদ, +1
ক্যামেরনজোনসভেব

আমি এর evaluateপরিবর্তে ব্যবহার করবparse
চোলঠি পল টিটিওপিক

17

উদাহরণ:

$number = 4;
print "You have the {$number}th edition book";
//output: "You have the 4th edition book";

কোঁকড়া ধনুর্বন্ধনী ছাড়া পিএইচপি নামের একটি ভেরিয়েবল সন্ধান করার চেষ্টা করবে $numberth, এটি বিদ্যমান নেই!


3

আমি অবজেক্টের বৈশিষ্ট্যগুলিতে অ্যাক্সেস করতেও এটি দরকারী বলে মনে করেছি যেখানে বৈশিষ্ট্যের নামগুলি কিছু পুনরাবৃত্তকারী দ্বারা পৃথক হয়। উদাহরণস্বরূপ, আমি সময়সীমার একটি সেট জন্য নীচের প্যাটার্নটি ব্যবহার করেছি: ঘন্টা, দিন, মাস।

$periods=array('hour', 'day', 'month');
foreach ($periods as $period)
{
    $this->{'value_'.$period}=1;
}

এই একই প্যাটার্নটি ক্লাস পদ্ধতিগুলি অ্যাক্সেস করতেও ব্যবহার করা যেতে পারে। স্ট্রিং এবং স্ট্রিং ভেরিয়েবলগুলি ব্যবহার করে কেবল একই পদ্ধতিতে পদ্ধতির নামটি তৈরি করুন।

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

class timevalues
{
                             // Database table values:
    public $value_hour;      // maps to values.value_hour
    public $value_day;       // maps to values.value_day
    public $value_month;     // maps to values.value_month
    public $values=array();

    public function __construct()
    {
        $this->value_hour=0;
        $this->value_day=0;
        $this->value_month=0;
        $this->values=array(
            'hour'=>$this->value_hour,
            'day'=>$this->value_day,
            'month'=>$this->value_month,
        );
    }
}

-5

আমি এখানে একটি ওয়ার্ডপ্রেস প্লাগইন থেকে পেয়েছি কোড

$data = $wpdb->get_results("select * from {$wpdb->prefix}download_monitor_files");

জটিল স্ট্রিংগুলির ফর্ম্যাট করার জন্য এটি সত্যই সহজ কৌশল।

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