আমি @
নীচের মতো কিছু নির্দিষ্ট ক্রিয়াকলাপের সামনে ব্যবহারগুলি দেখেছি :
$fileHandle = @fopen($fileName, $writeAttributes);
এই প্রতীক ব্যবহার কি?
আমি @
নীচের মতো কিছু নির্দিষ্ট ক্রিয়াকলাপের সামনে ব্যবহারগুলি দেখেছি :
$fileHandle = @fopen($fileName, $writeAttributes);
এই প্রতীক ব্যবহার কি?
উত্তর:
এটি ত্রুটি বার্তা দমন করে - পিএইচপি ম্যানুয়ালটিতে ত্রুটি নিয়ন্ত্রণ অপারেটরগুলি দেখুন ।
isset()
এড়ানোর জন্য এটি অপ্রয়োজনীয় এর ব্যবহার করে undefined offset
।
এটি ত্রুটিগুলি দমন করে।
ম্যানুয়ালটিতে ত্রুটি নিয়ন্ত্রণ অপারেটরগুলি দেখুন :
পিএইচপি একটি ত্রুটি নিয়ন্ত্রণ অপারেটরকে সমর্থন করে: স্বাক্ষর (@)। যখন পিএইচপি-তে কোনও অভিব্যক্তিতে প্রেরণ করা হয়, তখন সেই অভিব্যক্তি দ্বারা উত্পন্ন হওয়া কোনও ত্রুটি বার্তা উপেক্ষা করা হবে।
আপনি যদি সেট_ইরর_হ্যান্ডলার () দিয়ে একটি কাস্টম ত্রুটি হ্যান্ডলারের ফাংশন সেট করে থাকেন তবে এটি এখনও কল হয়ে যাবে, তবে এই কাস্টম ত্রুটি হ্যান্ডলারটি ত্রুটি- রিপোর্টিং কল করতে পারে (এবং হওয়া উচিত ) যা ফিরে আসবে যখন ত্রুটি ঘটানো কলটি একটি @ এর আগে হয়েছিল ...
@
প্রতীক ত্রুটি নিয়ন্ত্রণ অপারেটর (ওরফে "নীরবতা" বা "বন্ধ-আপ" অপারেটর)। এটি পিএইচপিকে সম্পর্কিত অভিব্যক্তি দ্বারা উত্পন্ন কোনও ত্রুটি বার্তা (নোটিশ, সতর্কতা, মারাত্মক, ইত্যাদি) দমন করে। এটি ঠিক একটি ইউনিারি অপারেটরের মতো কাজ করে, উদাহরণস্বরূপ, এটির একটি প্রাধান্য এবং সাহচর্য রয়েছে। নীচে কয়েকটি উদাহরণ দেওয়া হল:
@echo 1 / 0;
// generates "Parse error: syntax error, unexpected T_ECHO" since
// echo is not an expression
echo @(1 / 0);
// suppressed "Warning: Division by zero"
@$i / 0;
// suppressed "Notice: Undefined variable: i"
// displayed "Warning: Division by zero"
@($i / 0);
// suppressed "Notice: Undefined variable: i"
// suppressed "Warning: Division by zero"
$c = @$_POST["a"] + @$_POST["b"];
// suppressed "Notice: Undefined index: a"
// suppressed "Notice: Undefined index: b"
$c = @foobar();
echo "Script was not terminated";
// suppressed "Fatal error: Call to undefined function foobar()"
// however, PHP did not "ignore" the error and terminated the
// script because the error was "fatal"
আপনি যদি স্ট্যান্ডার্ড পিএইচপি ত্রুটি হ্যান্ডলারের পরিবর্তে একটি কাস্টম ত্রুটি হ্যান্ডলার ব্যবহার করেন তবে কি হবে:
আপনি যদি সেট_ইরর_হ্যান্ডলার () দিয়ে একটি কাস্টম ত্রুটি হ্যান্ডলারের ফাংশন সেট করে থাকেন তবে এটি এখনও কল হয়ে যাবে, তবে এই কাস্টম ত্রুটি হ্যান্ডলারটি ত্রুটি-রিপোর্টিং কল করতে পারে (এবং হওয়া উচিত) যা ফিরে আসবে যখন ত্রুটি ঘটানো কলটি একটি @ এর আগে হয়েছিল ।
এটি নিম্নলিখিত কোড উদাহরণে চিত্রিত হয়েছে:
function bad_error_handler($errno, $errstr, $errfile, $errline, $errcontext) {
echo "[bad_error_handler]: $errstr";
return true;
}
set_error_handler("bad_error_handler");
echo @(1 / 0);
// prints "[bad_error_handler]: Division by zero"
ত্রুটি পরিচালনাকারী @
প্রতীক কার্যকর ছিল কিনা তা যাচাই করে নি । ম্যানুয়ালটি নিম্নলিখিত পরামর্শ দেয়:
function better_error_handler($errno, $errstr, $errfile, $errline, $errcontext) {
if(error_reporting() !== 0) {
echo "[better_error_handler]: $errstr";
}
// take appropriate action
return true;
}
ইতিমধ্যে কিছু জবাব আগেই দিয়েছেন: @
অপারেটর পিএইচপি-তে সমস্ত ত্রুটিগুলি দমন করে, বিজ্ঞপ্তি, সতর্কতা এবং এমনকি গুরুতর ত্রুটি সহ।
বাট: দয়া করে, সত্যই @
অপারেটরটি ব্যবহার করবেন না ।
কেন?
ঠিক আছে, কারণ আপনি যখন @
ত্রুটি দমন করার জন্য অপারেটরটি ব্যবহার করেন তখন কোনও ত্রুটি দেখা দিলে আপনার আর কোথায় শুরু হবে তা সম্পর্কে কোনও ধারণা নেই। আমি ইতিমধ্যে লিগ্যাসি কোড সহ কিছু "মজা" পেয়েছি যেখানে কিছু বিকাশকারী @
বেশিরভাগ ক্ষেত্রে অপারেটরটি ব্যবহার করে । বিশেষত ফাইল অপারেশন, নেটওয়ার্ক কল ইত্যাদির ক্ষেত্রে এগুলি এমন অনেক ক্ষেত্রেই যখন প্রচুর বিকাশকারী @
অপারেটরের ব্যবহারের পরামর্শ দেয় কারণ কখনও কখনও এখানে ত্রুটি দেখা দিলে এটি কখনও সুযোগের বাইরে থাকে (উদাহরণস্বরূপ একটি তৃতীয় পক্ষের এপিআই অ্যাক্সেসযোগ্য হতে পারে ইত্যাদি) etc. )।
কিন্তু এখনও এটি ব্যবহার না করার কী লাভ? আসুন দুটি দৃষ্টিকোণ থেকে এক নজরে দেখুন:
বিকাশকারী হিসাবে: কখন@
ব্যবহৃত হয়, কোথা থেকে শুরু করব তা আমার ঠিক ধারণা নেই। যদি@
ত্রুটিসহকয়েকশত বা এমনকি কয়েক হাজার ফাংশন কলগুলি থাকেতবে তা রোজকারের মতো হতে পারে। এই ক্ষেত্রে কোনও যুক্তিসঙ্গত ডিবাগিং সম্ভব নয় possible এমনকি এটি যদি তৃতীয় পক্ষের ত্রুটি হয় - তবে এটি ঠিক আছে এবং আপনি দ্রুত সম্পন্ন করেছেন। ;-) ত্রুটিযুক্ত লগটিতে পর্যাপ্ত বিবরণ যুক্ত করা আরও ভাল, সুতরাং লগ এন্ট্রি এমন আরও কিছু যা অবশ্যই পরীক্ষা করা উচিত বা এটি যদি কেবলমাত্র তৃতীয় পক্ষের ব্যর্থতা যা বিকাশকারীর বাইরে না থাকে সেগুলি বিকাশকারীরা সহজেই সিদ্ধান্ত নিতে সক্ষম হন।
একজন ব্যবহারকারী হিসাবে: ব্যবহারকারীরা ত্রুটির কারণ কী বা না তা মোটেই পাত্তা দেয় না। তাদের কাজ করার, কোনও নির্দিষ্ট কাজ শেষ করার জন্য সফ্টওয়্যার রয়েছে ইত্যাদি ইত্যাদি তারা বিকাশকারীর ত্রুটি বা তৃতীয় পক্ষের সমস্যা কিনা সেদিকে খেয়াল রাখে না। বিশেষত ব্যবহারকারীদের জন্য, আমি সমস্ত ত্রুটিগুলি সুযোগের বাইরে থাকলেও লগ করার জন্য দৃ .়ভাবে পরামর্শ দিচ্ছি। সম্ভবত আপনি লক্ষ্য করবেন যে একটি নির্দিষ্ট এপিআই ঘন ঘন অফলাইন থাকে। আপনি কি করতে পারেন? আপনি আপনার এপিআই অংশীদারের সাথে কথা বলতে পারেন এবং তারা এটিকে স্থিত রাখতে সক্ষম না হলে আপনার সম্ভবত অন্য কোনও সঙ্গীর সন্ধান করা উচিত।
সংক্ষেপে: আপনার জানা উচিত যে এর মতো কিছু রয়েছে @
(জ্ঞান সর্বদা ভাল থাকে) তবে কেবল এটি ব্যবহার করবেন না । অনেক বিকাশকারী (বিশেষত অন্যদের কাছ থেকে সেগুলি ডিবাগিং কোড) খুব কৃতজ্ঞ হবে।
@
সঠিক কাজটি করবে না, এটি বিশেষত কার্যকর যদি আপনি text/html
ক্লায়েন্টের কাছে (বা অনুরূপ) ফিরে না আসছেন তবে। (সম্ভবত ফিরে image/png
বা "জসন")
if( session_status() == PHP_SESSION_NONE ) session_start();
এটি উত্তরাধিকার সূত্রে প্রাপ্ত একটি উত্তরাধিকারসূচক অ্যাপ্লিকেশন এবং এমন অনেকগুলি জায়গা রয়েছে যেখানে সেটআপ স্ক্রিপ্টটি একাধিকবার কল হয়ে যায়, তাই আমাকে পরীক্ষা করতে হবে to কী, যদি কোনও হয়, কেবল ব্যবহার করতে সমস্যা হবে @session_start();
?
@$this->stats['device_os'][$date][$creative_id][$device_id][$operating_system]['clicks']++;
প্রতিটি স্তরে আইসেট চেক থাকা এবং এটি যখন না হয় তখন তা পূরণ করার বিকল্পের চেয়ে অনেক ভাল।
ধরা যাক আমরা "@" অপারেটরটি ব্যবহার না করে নিই তবে আমাদের কোডটি এর মতো দেখাবে:
$fileHandle = fopen($fileName, $writeAttributes);
এবং যদি আমরা যে ফাইলটি খোলার চেষ্টা করছি তা যদি পাওয়া না যায় তবে কী হবে? এটি একটি ত্রুটি বার্তা প্রদর্শন করবে।
ত্রুটি বার্তাটি দমন করতে আমরা "@" অপারেটরটি এর মতো ব্যবহার করছি:
$fileHandle = @fopen($fileName, $writeAttributes);
@
-র প্রথম স্থানে এই ধরণের কাজ করার জন্য একটি নিখুঁত উদাহরণ । অন্যান্য প্রোগ্রামিং ভাষা অভিন্ন আছে ব্যতিক্রম হ্যান্ডলিং দৃশ্যকল্প এই ধরনের সঙ্গে মোকাবিলা করার জন্য stackoverflow.com/questions/1087365
@
ত্রুটি বার্তা দমন করে।
এটি কোড স্নিপেটে যেমন ব্যবহৃত হয়:
@file_get_contents('http://www.exaple.com');
যদি " http://www.exaple.com " ডোমেনটি অ্যাক্সেসযোগ্য @
না হয় তবে একটি ত্রুটি দেখানো হবে, তবে কিছুই দিয়ে দেখানো হয়নি।
সাইন: পিএইচপি এক এরর নিয়ন্ত্রণ অপারেটর সমর্থন (@)
। যখন পিএইচপি-তে কোনও অভিব্যক্তিতে প্রেরণ করা হয়, তখন সেই অভিব্যক্তি দ্বারা উত্পন্ন হওয়া কোনও ত্রুটি বার্তা উপেক্ষা করা হবে।
আপনার সাথে একটি কাস্টম ত্রুটি হ্যান্ডলার ফাংশন সেট, তাহলে set_error_handler()
তারপর এটি এখনও বলা হবে, কিন্তু এই কাস্টম ত্রুটি হ্যান্ডলার সম্ভব (এবং উচিৎ) কলের error_reporting()
যা ফিরে আসবে 0
কল করার সময় যে ত্রুটি আলোড়ন সৃষ্টি একটি পূর্বে ছিল @
।
<?php
/* Intentional file error */
$my_file = @file ('non_existent_file') or
die ("Failed opening file: error was '$php_errormsg'");
// this works for any expression, not just functions:
$value = @$cache[$key];
// will not issue a notice if the index $key doesn't exist.
?>
বিঃদ্রঃ:-
1) @ -Oprator শুধুমাত্র অভিব্যক্তিগুলিতে কাজ করে।
2) থাম্বের একটি সহজ নিয়ম হ'ল: যদি আপনি কোনও কিছুর মূল্য নিতে পারেন তবে আপনি এটিতে @ অপারেটরকে प्रीেন্ড করতে পারেন। উদাহরণস্বরূপ, আপনি এটিকে ভেরিয়েবল, ফাংশন এবং কল, ধ্রুবক এবং আরও কিছুতে অন্তর্ভুক্ত করতে পারেন। আপনি এটিকে ফাংশন বা শ্রেণি সংজ্ঞা, বা শর্তাধীন কাঠামো যেমন যদি এবং ভবিষ্যদ্বাণী, এবং আরও কিছুতে প্রিপেন্ড করতে পারবেন না।
সতর্কবাণী: -
বর্তমানে "@" ত্রুটি-নিয়ন্ত্রণ অপারেটর উপসর্গ এমনকি সমালোচনামূলক ত্রুটিগুলির জন্য ত্রুটি প্রতিবেদন অক্ষম করবে যা স্ক্রিপ্টের সম্পাদন বন্ধ করে দেবে। অন্যান্য জিনিসের মধ্যে, এর অর্থ হ'ল আপনি যদি একটি নির্দিষ্ট ফাংশন থেকে ত্রুটিগুলি দমন করতে "@" ব্যবহার করেন এবং তা উপলব্ধ না হয় বা ভুল টাইপ করা হয়েছে, তবে স্ক্রিপ্টটি ঠিক সেখানে মারা যাবে কেন তার কোনও ইঙ্গিত ছাড়াই।
@ ব্যবহার করার সময় এখানে কয়েকটি পয়েন্টার রয়েছে যা আপনার অবহিত হওয়া উচিত, সম্পূর্ণ পোস্ট ডাউন দেখতে এই পোস্টটি দেখুন: http://mstd.eu/index.php/2016/06/30/php- দ্রুত ছুঁড়াত্তয়ালা-কি-is--প্রতীক ব্যবহৃত-জন্য-ইন-পিএইচপি /
@ প্রতীক প্রিপেন্ড করা সহ ত্রুটি হ্যান্ডলারটি এখনও বহিস্কার করা হয়েছে, এটির অর্থ কেবল 0 এর একটি ত্রুটি স্তর সেট করা আছে, এটি একটি কাস্টম ত্রুটি হ্যান্ডলারে যথাযথভাবে পরিচালনা করতে হবে।
@ এর সাথে অন্তর্ভুক্ত করার প্রস্তুতি অন্তর্ভুক্ত ফাইলের সমস্ত ত্রুটি 0 এর ত্রুটি স্তরে সেট করবে
@
ফাংশন দ্বারা নিক্ষিপ্ত ত্রুটি বার্তা দমন করে। fopen
ফাইলটি প্রস্থান না করার সময় একটি ত্রুটি নিক্ষেপ করে। @
চিহ্নটি কার্যকর করার পরের লাইনে চলে যায় এমনকি ফাইলটি বিদ্যমান নেই। আপনি যখন পিএইচপি কোড বিকাশ করবেন তখন আমার প্রস্তাবনাটি আপনার স্থানীয় পরিবেশে এটি ব্যবহার করা হবে না।