উত্তর:
আপনার নতুন পরিবেশে E_STRICT
সতর্কতাগুলি পিএইচপি সংস্করণ <= 5.3.x এ সক্ষমerror_reporting
থাকতে পারে বা error_reporting
কমপক্ষে E_WARNING
পিএইচপি সংস্করণ> = 5.4 এর সাথে সেট করেছে । যখন যে ত্রুটি সূত্রপাত হয় $res
হয় NULL
বা এখনো সক্রিয়া না:
$res = NULL;
$res->success = false; // Warning: Creating default object from empty value
$res
ইতোমধ্যে কিছু মান থেকে আরম্ভ করা থাকলেও কোনও অবজেক্ট না হলে পিএইচপি একটি পৃথক ত্রুটি বার্তার প্রতিবেদন করবে :
$res = 33;
$res->success = false; // Warning: Attempt to assign property of non-object
E_STRICT
পিএইচপি 5.4 এর পূর্বে মানগুলি অনুসরণ করার জন্য , বা E_WARNING
পিএইচপি> = 5.4 এ স্বাভাবিক ত্রুটি স্তরটি ধরে নিয়ে আপনি ধরে নিচ্ছেন যে আপনি জেনেরিক কোনও বস্তু তৈরি করতে এবং সম্পত্তিটি নির্ধারণের চেষ্টা করছেন success
, আপনাকে বিশ্বব্যাপী নেমস্পেসে $res
একটি বিষয় হিসাবে ঘোষণা করতে হবে stdClass
:
$res = new \stdClass();
$res->success = false;
if (!isset($res)) $res = new stdClass();
। অন্যথায়, এই কোডটি "পুরাতন পিএইচপি" অন্তর্নিহিত অবজেক্ট তৈরির জন্য সমপরিমাণ প্রতিস্থাপন নয়।
এই বার্তাটি E_STRICT
পিএইচপি <= 5.3 এর জন্য। পিএইচপি ৫.৪ থেকে, এটি আনলাকিলিতে পরিবর্তিত হয়েছিল E_WARNING
। যেহেতু E_WARNING
বার্তা উপযোগী, আপনি তাদের সম্পূর্ণরূপে অক্ষম করতে চাই না।
এই সতর্কতা থেকে মুক্তি পাওয়ার জন্য আপনাকে অবশ্যই এই কোডটি ব্যবহার করতে হবে:
if (!isset($res))
$res = new stdClass();
$res->success = false;
এটি সম্পূর্ণ সমতুল্য প্রতিস্থাপন । এটি পিএইচপি নিঃশব্দে যা করছে ঠিক একই জিনিসটি আশ্বাস দেয় - দুর্ভাগ্যজনকভাবে এখন সতর্কতার সাথে - অন্তর্নিহিত বস্তু তৈরি। আপনার অবশ্যই সর্বদা এটি পরীক্ষা করা উচিত যে অবজেক্টটি ইতিমধ্যে উপস্থিত রয়েছে কিনা, যদি না আপনি নিশ্চিত হন যে এটি না। মাইকেল দ্বারা প্রদত্ত কোডটি সাধারণভাবে ভাল নয়, কারণ কিছু প্রসঙ্গে বিষয়গুলির উপর নির্ভর করে কিছু ক্ষেত্রে কোডটিতে একই জায়গায় ইতিমধ্যে সংজ্ঞায়িত করা যেতে পারে।
Undefined variable: res
।
কেবল,
$res = (object)array("success"=>false); // $res->success = bool(false);
অথবা আপনি ক্লাসগুলি সাথে ইনস্ট্যান্ট করতে পারেন:
$res = (object)array(); // object(stdClass) -> recommended
$res = (object)[]; // object(stdClass) -> works too
$res = new \stdClass(); // object(stdClass) -> old method
এবং এর সাথে মানগুলি পূরণ করুন:
$res->success = !!0; // bool(false)
$res->success = false; // bool(false)
$res->success = (bool)0; // bool(false)
আরও ইনফস: https://www.php.net/manual/en/language.tyype.object.php#language.types.object.casting
$this->route->uri = new stdClass();
পক্ষে কাজ করছে না, আমার এখনও সতর্কতা রয়েছে। দ্রষ্টব্য: $this->route
বিদ্যমান
আপনি যদি "@" অক্ষরটি লাইনের শুরু করেন তবে পিএইচপি এই লাইনের জন্য কোনও সতর্কতা / নোটিশ দেখায় না। উদাহরণ স্বরূপ:
$unknownVar[$someStringVariable]->totalcall = 10; // shows a warning message that contains: Creating default object from empty value
এই রেখার জন্য এই সতর্কতাটি প্রতিরোধের জন্য আপনাকে অবশ্যই "@" অক্ষরটি এই লাইনের শুরুতে হবে:
@$unknownVar[$someStringVariable]->totalcall += 10; // no problem. created a stdClass object that name is $unknownVar[$someStringVariable] and created a properti that name is totalcall, and it's default value is 0.
$unknownVar[$someStringVariable]->totalcall += 10; // you don't need to @ character anymore.
echo $unknownVar[$someStringVariable]->totalcall; // 20
বিকাশ করার সময় আমি এই কৌশলটি ব্যবহার করছি। আমি সমস্ত সতর্কতা বার্তাগুলি অক্ষম করতে পছন্দ করি না যদি আপনি সতর্কতাগুলি সঠিকভাবে পরিচালনা না করেন তবে ভবিষ্যতে সেগুলি একটি বড় ত্রুটি হয়ে যাবে।
যদি আপনার অ্যারে থাকে এবং এতে বস্তু যুক্ত হন তবে এটি চেষ্টা করুন।
$product_details = array();
foreach ($products_in_store as $key => $objects) {
$product_details[$key] = new stdClass(); //the magic
$product_details[$key]->product_id = $objects->id;
//see new object member created on the fly without warning.
}
এই পাঠায় ARRAY এর অবজেক্টস পরে ব্যবহার করার জন্য ~!
এটা চেষ্টা কর:
ini_set('error_reporting', E_STRICT);
E_STRICT
মারাত্মক ত্রুটির জন্য বার্তা দমন করা সহ ত্রুটিগুলি ব্যতীত সমস্ত ত্রুটি প্রতিবেদন অক্ষম করে । এই নির্দিষ্ট সতর্কতাটি সমাধান করার জন্য এটি কোনও যুক্তিসঙ্গত পরামর্শ নয় এবং এর চেয়ে আরও বেশি কিছু এমন যা আপনি কখনও কখনও করতে চান না। কেন 5 জন লোক এটিকে উচ্চারণ করেছে, আমার কোনও ধারণা নেই।
ini_set('error_reporting', -1);
ডিবাগ করার সময় ব্যবহার করুন তবে পূর্বের মতো উপরেরটি ব্যবহার করবেন না।
আমার একই সমস্যা ছিল এবং এটি সমস্যার সমাধান বলে মনে হচ্ছে। আপনার কেবলমাত্র শ্রেণীর $ res অবজেক্টটি আরম্ভ করতে হবে। ধরুন এখানে ক্লাসের নাম টেস্ট।
class test
{
//You can keep the class empty or declare your success variable here
}
$res = new test();
$res->success = false;
এটি একটি সতর্কতা যা আমি পিএইচপি 7 এ सामना করেছি, এটির সহজ সমাধানটি ব্যবহারের আগে ভেরিয়েবলকে আরম্ভ করে initial
$myObj=new \stdClass();
একবার আপনি এটি অন্তর্নিহিত পরে আপনি এটি বস্তুর জন্য ব্যবহার করতে পারেন
$myObj->mesg ="Welcome back - ".$c_user;
এই সমস্যাটি হ'ল কারণ আপনি অবজেক্টের কোনও উদাহরণকে অর্পণ করছেন যা আরম্ভ করা হয়নি। যেমন:
আপনার ক্ষেত্রে:
$user->email = 'exy@gmail.com';
সমাধান:
$user = new User;
$user->email = 'exy@gmail.com';
এই ত্রুটিটি পাওয়ার একটি সহজ উপায় হ'ল নীচে (ক) টাইপ করা, যার অর্থ টাইপ (খ)
(ক) $this->my->variable
(খ) $this->my_variable
তুচ্ছ, তবে খুব সহজেই উপেক্ষা করা এবং আপনি এটির সন্ধান না করা থাকলে স্পট করা শক্ত।
_
এবং->
আপনার ভেরিয়েবল ঘোষিত হয়েছে এবং সঠিক টাইপ আছে কিনা তা খতিয়ে দেখার প্রয়োজন হতে পারে।
if (!isset($res) || !is_object($res)) {
$res = new \stdClass();
// With php7 you also can create an object in several ways.
// Object that implements some interface.
$res = new class implements MyInterface {};
// Object that extends some object.
$res = new class extends MyClass {};
}
$res->success = true;
দেখুন পিএইচপি বেনামী শ্রেণীর ।
কোনও এপিআই থেকে ফিরে আসা কোনও বস্তুর সাথে ভেরিয়েবল যুক্ত করার চেষ্টা করার সময় আমার একই সমস্যা হয়েছিল। আমি ফোরচ লুপ দিয়ে ডেটাটি দিয়ে পুনরাবৃত্তি করছিলাম।
foreach ( $results as $data ) {
$data->direction = 0;
}
এটি "খালি মান থেকে ডিফল্ট অবজেক্ট তৈরি করা" লারাভেলের ব্যতিক্রম।
আমি খুব ছোট একটি পরিবর্তন দিয়ে এটি ঠিক করেছি।
foreach ( $results as &$data ) {
$data->direction = 0;
}
কেবল $ ডেটা একটি রেফারেন্স তৈরি করে।
আমি আশা করি যে এটি কারওর পক্ষে সহায়তা করবে এটি আমার মধ্য থেকে বেরিয়ে আসা নরকে বিরক্ত করেছিল!
প্রথমে মনে করুন আপনার অবজেক্ট $ res = new \ stdClass () তৈরি করা উচিত;
তারপরে কী এবং মান দিয়ে অবজেক্ট বরাদ্দ করুন থাই $ রেজ-> সাফল্য = মিথ্যা;
thay
)) যেখানে আপনি কিছু বিষয়বস্তুর পরে লাইন বিরতি চান, সেখানে বিরতি-করার আগে লাইনের দৃশ্যমান সামগ্রীতে দুটি ফাঁকা স্থান যুক্ত করুন space
না আপনি করবেন না .. এটি যখন এটিতে সাফল্যের মান যুক্ত করবে তখন এটি তৈরি করবে you আপনি যদি একটি নির্দিষ্ট না করে থাকেন তবে পূর্বনির্ধারিত বর্গ উত্তরাধিকার সূত্রে প্রাপ্ত হয়।
ব্যবহার করার চেষ্টা করুন:
$user = (object) null;
$res
?