w3schools - php wiki




পিএইচপি খালি মান থেকে ডিফল্ট অবজেক্ট তৈরি করা? (10)

আমি পিএইচপি 5.4 এবং তার পরে পিএইচপি এনভায়রনমেন্ট আপগ্রেড করার পরেই এই ত্রুটিটি দেখি। ত্রুটি এই কোড লাইন পয়েন্ট:

ত্রুটি:

খালি মান থেকে ডিফল্ট বস্তু তৈরি করা

কোড:

$res->success = false;

আমার প্রথম আমার $res বস্তু ঘোষণা করতে হবে?


আপনার নতুন পরিবেশে error_reporting সতর্কতাগুলি পিএইচপি সংস্করণগুলির <= error_reporting জন্য error_reporting সক্ষম করা থাকতে পারে, অথবা কেবলমাত্র পিএইচপি সংস্করণগুলির সাথে অন্তত E_WARNING সেট করতে error_reporting => 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

পিএইচপি 5.4 এর পূর্ববর্তী E_STRICT মানগুলি মেনে চলার জন্য, পিএইচপি> স্বাভাবিক E_WARNING ত্রুটি স্তরটি> = 5.4, আপনি জেনেরিক অবজেক্ট তৈরি করার চেষ্টা করছেন এবং সম্পত্তি success বরাদ্দ করার জন্য আপনাকে stdClass অবজেক্ট হিসাবে $res stdClass ঘোষণা করতে হবে। গ্লোবাল নামস্থান:

$res = new \stdClass();
$res->success = false;

আপনি অ্যারে আছে এবং এটি বস্তু যোগ করুন, তাহলে এই চেষ্টা করুন।

$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 প্রেরণ ~!


আমি একই সমস্যা ছিল এবং এই সমস্যা সমাধান বলে মনে হচ্ছে। আপনি শুধু একটি ক্লাসে $ Res অবজেক্ট আরম্ভ করতে হবে। ধরুন ক্লাসের নাম পরীক্ষা করে দেখুন।

class test
{
   //You can keep the class empty or declare your success variable here
}
$res = new test();
$res->success = false;

আমি ত্রুটিপূর্ণ পিএইচপি ফাইলের শীর্ষে নিম্নলিখিতটি রাখি এবং ত্রুটিটি আর প্রদর্শন করা হয়নি:

error_reporting(E_ERROR | E_PARSE);

এই বার্তাটি পিএইচপি <= 5.3 এর জন্য E_STRICT হয়েছে। পিএইচপি 5.4 থেকে, এটি আনলকিলি E_WARNING পরিবর্তিত হয়েছিল। যেহেতু E_WARNING বার্তাগুলি কার্যকর, তাই আপনি তাদের সম্পূর্ণরূপে নিষ্ক্রিয় করতে চান না।

এই সতর্কবার্তা পরিত্রাণ পেতে, আপনি এই কোড ব্যবহার করতে হবে:

if (!isset($res)) 
    $res = new stdClass();

$res->success = false;

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


এই সমস্যাটি ঘটেছে কারণ আপনার অবজেক্টের একটি উদাহরণ দেওয়া হয় যা শুরু হয় নি। উদাহরণস্বরূপ:

আপনার ক্ষেত্রে:

$user->email = '[email protected]';

সমাধান:

$user = new User;
$user->email = '[email protected]';

এটা চেষ্টা কর:

ini_set('error_reporting', E_STRICT);

কেবল,

    $res = (object)array("success"=>false); // $res->success = bool(false);

অথবা

    $res = (object)array(); // object(stdClass)

    $res = new stdClass();  // old method

এবং

    $res->success = !!0;    // bool(false)

    $res->success = false;  // bool(false)

    $res->success = (bool)0; // bool(false)

পরিবর্তনশীল ঘোষিত এবং সঠিক টাইপ আছে কিনা আপনি পরীক্ষা করতে হবে।

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;

পিএইচপি বেনামী ক্লাস দেখুন


ব্যবহার করে দেখুন:

$user = (object) null;




php