অনুপস্থিত {
বা }
ভুল ইন্ডেন্টেশনের কারণে
ম্যাচযুক্ত কোড ধনুর্বন্ধনী কম ভাল ফর্ম্যাট কোড যেমন সাধারণ:
if((!($opt["uniQartz5.8"]!=$this->check58)) or (empty($_POST['poree']))) {if
($true) {echo"halp";} elseif((!$z)or%b){excSmthng(False,5.8)}elseif (False){
যদি আপনার কোডটি দেখতে এমন হয় তবে নতুন করে শুরু করুন! অন্যথায় এটি আপনার বা অন্য কারও কাছে উপযুক্ত নয়। সাহায্যের জন্য অনুসন্ধান করার জন্য এটি ইন্টারনেটে এটি প্রদর্শন করার কোনও অর্থ নেই।
আপনি শুধুমাত্র এটা ঠিক করতে সক্ষম হবে, যদি আপনি চাক্ষুষরূপে নেস্টেড গঠন এবং যদি / অন্যথায় কন্ডিশন ও তাদের সম্পর্ক অনুসরণ করতে পারেন {
কোড ব্লক }
। তারা সব জুটিবদ্ধ কিনা তা দেখতে আপনার আইডিই ব্যবহার করুন।
if (true) {
if (false) {
…
}
elseif ($whatever) {
if ($something2) {
…
}
else {
…
}
}
else {
…
}
if (false) { // a second `if` tree
…
}
else {
…
}
}
elseif (false) {
…
}
যে কোনও ডাবল }
}
কেবল একটি শাখা বন্ধ করবে না, তবে পূর্ববর্তী শর্তের কাঠামো। অতএব একটি কোডিং শৈলী সঙ্গে লাঠি; যদি / অন্য গাছগুলিতে নেস্ট করে মিশে না যায় তবে মিলবে না।
এখানে ধারাবাহিকতা ছাড়াও, এটি দীর্ঘতর পরিস্থিতি এড়াতে সহায়ক হয়ে ওঠে। if
অপঠনযোগ্য-এক্সপ্রেশনগুলি এড়াতে অস্থায়ী পরিবর্তনশীল বা ফাংশন ব্যবহার করুন ।
IF
এক্সপ্রেশন ব্যবহার করা যাবে না
একটি আশ্চর্যজনকভাবে ঘন ঘন আগত আগত ভুল if
একটি অভিব্যক্তিতে একটি বিবৃতি যেমন মুদ্রণ বিবৃতি হিসাবে ব্যবহার করার চেষ্টা করে :
⇓
echo "<a href='" . if ($link == "example.org") { echo …
যা অবশ্যই অবৈধ।
আপনি একটি ত্রিবার্ষিক শর্তসাপেক্ষ ব্যবহার করতে পারেন , তবে পঠনযোগ্যতার প্রভাবগুলি থেকে সাবধান থাকুন।
echo "<a href='" . ($link ? "http://yes" : "http://no") . "</a>";
অন্যথায় এই ধরনের আউটপুট কনস্ট্রাক্টস ব্রেক করুন: একাধিক if
গুলি এবং echo
গুলি ব্যবহার করুন ।
আরও ভাল, অস্থায়ী ভেরিয়েবলগুলি ব্যবহার করুন এবং আপনার শর্তাবলীর আগে রাখুন:
if ($link) { $href = "yes"; } else { $href = "no"; }
echo "<a href='$href'>Link</a>";
এই ধরনের ক্ষেত্রে ফাংশন বা পদ্ধতিগুলি সংজ্ঞায়িত করা প্রায়শই বোধগম্য হয়।
কন্ট্রোল ব্লকগুলি "ফলাফল" ফিরিয়ে দেয় না
এখন এটি খুব কম সাধারণ, তবে কয়েক কোডার এমনকি এমন আচরণ করার চেষ্টা করে if
যেন এটি কোনও ফলাফল ফিরে আসতে পারে :
$var = if ($x == $y) { "true" };
যা if
স্ট্রিং কনটেনটেশন / এক্সপ্রেশনের মধ্যে কাঠামোগতভাবে অভিন্ন ।
- তবে নিয়ন্ত্রণ কাঠামোর (যদি / অগ্রণী / সময়) এর কোনও "ফলাফল" থাকে না ।
- আক্ষরিক স্ট্রিং "সত্য" এছাড়াও কেবল একটি অকার্যকর স্টেটমেন্ট হবে।
কোড ব্লকে আপনাকে একটি অ্যাসাইনমেন্ট ব্যবহার করতে হবে :
if ($x == $y) { $var = "true"; }
বিকল্পভাবে, একটি ?:
ত্রৈমাসিক তুলনা অবলম্বন করুন ।
যদি হয়
শর্তের মধ্যে আপনি বাসা বাঁধতে পারবেন নাif
:
⇓
if ($x == true and (if $y != false)) { ... }
যা স্পষ্টতই অপ্রয়োজনীয়, কারণ and
(বা or
) ইতিমধ্যে শৃঙ্খলা তুলনা করার অনুমতি দেয়।
ভুলে যাওয়া ;
সেমিকোলনস
আরও একবার: প্রতিটি নিয়ন্ত্রণ ব্লকের একটি বিবৃতি হওয়া দরকার। যদি আগের কোড পিসটি সেমিকোলন দিয়ে শেষ না করা হয়, তবে এটি একটি গ্যারান্টিযুক্ত সিনট্যাক্স ত্রুটি:
⇓
$var = 1 + 2 + 3
if (true) { … }
বিটিডব্লিউ, একটি {…}
কোড ব্লকের শেষ লাইনের জন্য একটি সেমিকোলনও প্রয়োজন।
সেমিকোলন খুব তাড়াতাড়ি
এখন কোনও নির্দিষ্ট কোডিং শৈলীর জন্য দোষ দেওয়া সম্ভবত ভুল, কারণ এই ক্ষতিটিকে উপেক্ষা করা খুব সহজ:
⇓
if ($x == 5);
{
$y = 7;
}
else ←
{
$x = -1;
}
যা আপনি কল্পনাও করতে পারেন তার চেয়ে প্রায়শই ঘটে।
- আপনি যখন এর সাথে অভিব্যক্তিটি সমাপ্ত করবেন
if ()
;
তখন একটি শূন্য বিবৃতি কার্যকর করবে। ;
একটি খালি হয়ে {}
তার নিজস্ব!
{…}
ব্লক এইভাবে থেকে বিচু্যত হয় if
, এবং সবসময় চালানো হবে।
- সুতরাং
else
আর একটি খোলা if
নির্মাণের সাথে আর সম্পর্ক ছিল না , এ কারণেই এটি অপ্রত্যাশিত T_ELSE সিনট্যাক্স ত্রুটির দিকে পরিচালিত করবে।
যা এই সিনট্যাক্স ত্রুটির অনুরূপ সূক্ষ্ম পরিবর্তনের ব্যাখ্যা দেয়:
if ($x) { x_is_true(); }; else { something_else(); };
কোথায় ;
কোড পর ব্লক {…}
পুরো বন্ধ if
, কনস্ট্রাক্ট ছিন্ন else
চিহ্নগুলি সিন্টেক্সের শাখা।
কোড ব্লক ব্যবহার করা হচ্ছে না
এটি সিনট্যাকটিক্যালি / / শাখায় কোড ব্লকের জন্য কোঁকড়া ধনুর্বন্ধনী {
... বাদ দিতে মঞ্জুরিপ্রাপ্ত । যা দুঃখজনকভাবে একটি সিনট্যাক্স শৈলী যা বিপরীত কোডারদের কাছে খুব সাধারণ। (মিথ্যা অনুমানের অধীনে এটি টাইপ করা বা পড়ার পক্ষে দ্রুত ছিল)।}
if
elseif
else
তবে সিনট্যাক্সটি ট্রিপ করার সম্ভাবনা খুব বেশি। শীঘ্রই বা পরে অতিরিক্ত বিবৃতিগুলি যদি / অন্য শাখাগুলিতে প্রবেশ করতে পারে তবে:
if (true)
$x = 5;
elseif (false)
$x = 6;
$y = 7; ←
else
$z = 0;
কিন্তু আসলে কোড ব্লক ব্যবহার করতে আপনাকে লিখতে হবে {
... }
সেগুলি যেমন!
এমনকি পাকা প্রোগ্রামাররা এই ব্রেসলেস সিনট্যাক্স এড়িয়ে চলেন বা কমপক্ষে একে নিয়মের ব্যতিক্রমী ব্যতিক্রম হিসাবে বুঝতে পারেন।
অন্যথায় / অন্যক্রমে ক্রমে এলসিফ
নিজেকে মনে করিয়ে দেওয়ার একটি বিষয় অবশ্যই শর্তাধীন আদেশ ।
if ($a) { … }
else { … }
elseif ($b) { … }
↑
আপনি elseif
যতটা চান আপনার থাকতে পারেন তবে else
শেষ পর্যন্ত যেতে হবে । এটা ঠিক কিভাবে।
শ্রেণির ঘোষণা
উপরে উল্লিখিত হিসাবে , আপনার কোনও শ্রেণীর ঘোষণায় নিয়ন্ত্রণ বিবৃতি থাকতে পারে না:
class xyz {
if (true) {
function ($var) {}
}
আপনি হয় একটি ফাংশন সংজ্ঞা ভুলে গেছেন , বা }
এই ক্ষেত্রে খুব তাড়াতাড়ি একটি বন্ধ করে দিয়েছেন ।
অপ্রত্যাশিত T_ELSEIF / T_ELSE
পিএইচপি এবং এইচটিএমএল মিশ্রিত করার সময়, একটির }
জন্য বন্ধটি if/elseif
অবশ্যই <?php ?>
পরবর্তী পিএইচপি ব্লকে থাকা উচিত elseif/else
। এটিগুলির অংশ হওয়ার }
জন্য বন্ধ হওয়ার কারণে এটি একটি ত্রুটি তৈরি করবে :if
elseif
<?php if ($x) { ?>
html
<?php } ?>
<?php elseif ($y) { ?>
html
<?php } ?>
সঠিক ফর্ম <?php } elseif
:
<?php if ($x) { ?>
html
<?php } elseif ($y) { ?>
html
<?php } ?>
এটি কমবেশি ভুল ইনডেন্টেশনের একটি প্রকরণ - সম্ভবত প্রায়শই ভুল কোডিং উদ্দেশ্যগুলির উপর ভিত্তি করে।
আপনি অভ্যন্তরীণ এবং / কাঠামোগত টোকেনগুলিতে অন্যান্য বিবৃতি ম্যাস করতে পারবেন না :if
elseif
else
if (true) {
}
echo "in between"; ←
elseif (false) {
}
?> text <?php ←
else {
}
হয় কেবল {…}
কোড ব্লকগুলিতেই ঘটতে পারে , নিয়ন্ত্রণ কাঠামো টোকেনগুলির মধ্যে নয়।
- এটি কোনওভাবেই বোঝা যাবে না। এটি এমন নয় যে পিএইচপি
if
এবং else
শাখাগুলির মধ্যে লাফ দেয় যখন কিছু "অপরিজ্ঞাত" অবস্থা ছিল ।
- আপনার মন তৈরি করতে হবে যেখানে মুদ্রণ বিবৃতিগুলি / অথবা যদি তাদের উভয় শাখায় পুনরাবৃত্তি করা দরকার।
বা আপনি যদি অন্য নিয়ন্ত্রণ স্ট্রাকচারের মধ্যে / অন্য কোনও অংশ করতে পারেন :
foreach ($array as $i) {
if ($i) { … }
}
else { … }
সেখানে নেই অন্বিত সম্পর্ক মধ্যে if
এবং else
। foreach
এ আভিধানিক সুযোগ প্রান্ত }
, তাই কোন বিন্দু if
অব্যাহত রাখার জন্য কাঠামো।
T_ENDIF
একটি অপ্রত্যাশিত T_ENDIF অভিযোগ হলে, আপনি বিকল্প বাক্য গঠন শৈলী ব্যবহার করছেন if:
⋯ elseif:
⋯ else:
⋯ endif;
। যা আপনার সম্পর্কে সত্যিকার অর্থে দুবার চিন্তা করা উচিত।
একটি সাধারণ ফাঁদ eerily বিভ্রান্তিকর অনুরূপ :
একটি জন্য কোলন ;
সেমিকোলন । ("সেমিকোলনে খুব তাড়াতাড়ি আচ্ছাদিত")
যেহেতু টেমপ্লেট ফাইলগুলিতে অন্বেষণ করা শক্ত, তাই বিকল্প সিনট্যাক্স ব্যবহার করার সময় - এটি প্রশংসনীয় যে আপনার কোনওটির সাথে endif;
মেলে না if:
।
ব্যবহার } endif;
করা একটি দ্বিগুণ- if
নির্ধারক।
একটি "অপ্রত্যাশিত $ প্রান্ত" হ'ল সাধারণত ভুলে যাওয়া }
ক্লোরিং বক্রবন্ধনী দাম is
অ্যাসাইনমেন্ট বনাম তুলনা
সুতরাং, এটি একটি সিনট্যাক্স ত্রুটি নয়, তবে এই প্রসঙ্গে উল্লেখ করার মতো:
⇓
if ($x = true) { }
else { do_false(); }
এটি কোনও ==
/ ===
তুলনা নয়, তবে একটি =
অ্যাসাইনমেন্ট । এটি বরং সূক্ষ্ম, এবং সহজেই কিছু ব্যবহারকারীর অসহায়ভাবে পুরো শর্তের ব্লকগুলি সম্পাদনা করতে পারে। প্রথমে অনিচ্ছাকৃত কার্যভারগুলি সন্ধান করুন - যখনই আপনি কোনও যুক্তিযুক্ত ত্রুটি / দুর্ব্যবহারের অভিজ্ঞতা পান।