পিএইচপি-তে কীভাবে "কিছু বা ডিআইআই () করুন" কাজ করে?


99

আমি একটি মাইএসকিউএল ডাটাবেস অ্যাক্সেস করতে একটি পিএইচপি অ্যাপ লিখছি, এবং একটি টিউটোরিয়ালে, এটি ফর্মের কিছু বলে

mysql_connect($host, $user, $pass) or die("could not connect");

পিএইচপি কীভাবে জানতে পারে যে ফাংশনটি ব্যর্থ হয়েছে যাতে এটি ডাই অংশটি চালায়? আমার অনুমান আমি এর "বা" অংশটি কীভাবে কাজ করে তা জিজ্ঞাসা করছি। আমি আগে দেখেছি বলে মনে হয় না।


4
অন্যদিকে, প্রকৃত অ্যাপ্লিকেশনগুলিতে এই ধরণের যুক্তি ব্যবহার করবেন না। এটি এখনও কতটা টিউটোরিয়াল করে তা আমাকে অবাক করে দেয়।
ইরান গালপারিন

4
কেন ব্যবহার করবেন না? এটি সত্যিই দুর্দান্ত এবং পঠনযোগ্য ...
rkj

11
টিউটোরিয়ালটির জন্য এটি সহজ এবং উপযুক্ত হতে পারে তবে আপনি চান না যে আপনার স্ক্রিপ্টটি সত্য ব্যবহারকারীর সামনে এর মতো একটি ত্রুটি বার্তায় অনর্গলভাবে মারা যায়। একটি কাস্টম ত্রুটি পৃষ্ঠা দেখাচ্ছে (প্রকৃত ত্রুটি নির্দিষ্ট না করেই!) + ত্রুটিটি লগইন করা আবশ্যক।
ইরান গালপারিন

4
আমি "বা" কথা বলছি, "মরা" নয়।
আর্টেলিয়াস

21
mysql_connect ($ হোস্ট, $ ব্যবহারকারী, $ পাস) বা প্রিন্টনাইস এরির ('ডাটাবেসকনেকশন এরির');
matpie

উত্তর:


134

যদি প্রথম বিবৃতিটি ফিরে আসে true, তবে সম্পূর্ণ বিবৃতিটি অবশ্যই trueদ্বিতীয় অংশটি কখনও কার্যকর হয় না।

উদাহরণ স্বরূপ:

$x = 5;
true or $x++;
echo $x;  // 5

false or $x++;
echo $x; // 6

অতএব, যদি আপনার জিজ্ঞাসাটি ব্যর্থ হয়, তবে এটি die()বিবৃতিটি মূল্যায়ন করবে এবং স্ক্রিপ্টটি শেষ করবে।


4
ভাল ব্যাখ্যা। পিএইচপি এর ভাষা নির্ধারণ এটি "বিপদযুক্ত যদি" ​​কিছুটা বিপজ্জনক, কারণ আপনার এমন বক্তব্য থাকতে পারে যা আপনার মনে হয় মৃত্যুদন্ড কার্যকর করা হয় তবে বাস্তবে তা হয় না, এবং এটি স্পষ্ট নয় যেমন আপনার যদি একটি ব্লক ছিল।
পেট্রুজা

6
একে সংক্ষিপ্ত-সার্কিট মূল্যায়ন বলা হয় এবং পিএইচপি বাদে অন্য ভাষায়ও কার্যকর।
মিঃ গ্রিভার

4
যাইহোক, আপনি কেবল ওআর পরে কেবল একটি বিবৃতি ব্যবহার করতে পারেন। একটি ব্লক স্টেটমেন্ট সিনট্যাক্স চেক করতে ব্যর্থ হবে (যেমন প্রকৃত ত্রুটি বার্তা পার্স ত্রুটি হতে পারে: সিনট্যাক্স ত্রুটি, অপ্রত্যাশিত 'in' ইন ...)
স্কট চু

এবং এখানে আমি ভাবছিলাম with, এটি পাইথনের বক্তব্যের মতো এক ধরণের উন্নত বৈশিষ্ট্য ছিল , যখন এটি আসলে কেবল একটি বুলিয়ান অভিব্যক্তি ... আমি মনে করি এই অভিব্যক্তিটি ব্যবহার করার সময় অতিরিক্ত যত্ন নেওয়া উচিত যদি আপনি আশা করেন যে আপনি যদি কোনও ক্ষেত্রে পরিষ্কার-পরিচ্ছন্নতার কাজ করেন to ত্রুটি দয়া করে, আমি ভুল হলে আমাকে সংশোধন করুন, তবে আপনি যদি করেন func_call($file) or die();এবং ফাংশন ব্যর্থ হয়, তবে স্ক্রিপ্টগুলি মারা গেলে ফাইলটি উন্মুক্ত রেখে দেওয়া হবে।
পেড্রোম্যানোয়েল

@ পেত্রুজা এমন orপরিস্থিতিতে ifকাজ করা কি খুব ভাল অনুশীলন যেখানে কোনও কাজ করতে পারে?
চুনোমণ্ডকোত্তর

32

সিএইচপির orমতো পিএইচপি-র কাজগুলি ||(যা ঘটনাক্রমে পিএইচপি দ্বারা সমর্থিত - orকেবল আরও সুন্দর দেখায় এবং অপারেটরের অগ্রাধিকার রয়েছে - এই পৃষ্ঠাটি দেখুন )।

এটি একটি শর্ট সার্কিট অপারেটর হিসাবে পরিচিত কারণ এটি চূড়ান্ত মান নির্ধারণ করার জন্য পর্যাপ্ত তথ্য পাওয়ার পরে এটি কোনও মূল্যায়ন এড়িয়ে যায়।

আপনার উদাহরণে, যদি mysql_connect()সত্য ফেরত দেয়, তবে পিএইচপি ইতিমধ্যে জানে যে পুরো বিবৃতিটি সত্য হিসাবে মূল্যায়ন করবে যাই হোক না কেন তার মূল্যায়ন হয় না die()এবং তাই die()মূল্যায়ন করা হয় না।

যদি mysql_connect()মিথ্যা ফেরত দেয়, পিএইচপি জানি না যে পুরো বিবৃতিটি সত্য বা মিথ্যাতে মূল্যায়ন করবে কিনা তাই এটি এগিয়ে যায় এবং খণ্ডন করার চেষ্টা করে die()- প্রক্রিয়াটির স্ক্রিপ্ট শেষ করে।

এটি কেবল একটি দুর্দান্ত কৌশল যা কাজের জন্য সুবিধা গ্রহণ orকরে।


শর্ট সার্কিটের নামকরণের জন্য +1। এছাড়াও "পার্শ্ব প্রতিক্রিয়া" নামকরণ করা হতে পারে। আমরা ডাই () রিটার্ন কোডে মোটেও আগ্রহী নই, আমরা কেবল এটির প্রয়োগের প্রভাব চাই। (এটি সর্বদা মরবে না) ()। এটি পিউরিস্টদের কাছে সর্বদা জনপ্রিয় নয় কারণ কিছু প্রভাব অস্পষ্ট হতে পারে।
mckenzm

এবং এই সব না। আপনি স্টাফ ব্যবহার করতে এবং একত্রিত করতে পারেন, যেখানে আপনি চান যে কোনও জিনিস দ্বিতীয় জিনিস করার আগে অবশ্যই কাজ করে।
My1

11

এটি অন্যদের বর্ণিত হিসাবে কাজ করে।

পিএইচপি-তে, "ডাই" ব্যবহার করবেন না, কারণ এটি কোনও ব্যতিক্রম বাড়াবে না (যেমন এটি পার্লের মতো হয়)। পরিবর্তে স্বাভাবিকভাবে একটি ব্যতিক্রম ঠিকভাবে নিক্ষেপ করুন।

ডাই পিএইচপি-তে ধরা পড়তে পারে না, এবং লগ করে না - পরিবর্তে এটি বার্তাটি অযৌক্তিকভাবে প্রিন্ট করে এবং সাথে সাথে কাউকে কিছু না বলে বা ইভেন্ট রেকর্ড করার কোনও সুযোগ না দিয়ে স্ক্রিপ্টটি ত্যাগ করে, আবার চেষ্টা করুন ইত্যাদি ret


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