php - কীভাবে আমি পিএইচপি-তে একটি ভেরিয়েবল(ডট নোটেশন) নামে একটি গভীর অবজেক্ট সম্পত্তি অ্যাক্সেস করতে পারি?




properties (4)

@ ডিজিট পোস্টে কিছুটা উন্নতি যুক্ত হয়েছে।

এটি আপনাকে অ্যারে দিয়ে যেতে হবে এমন কেসগুলি পরিচালনা করার অনুমতি দেয়।

$path = 'foo.bar.songs.0.title';
echo array_reduce(explode('.', $path), function ($o, $p) { return is_numeric($p) ? $o[$p] : $o->$p; }, $user);

সম্পাদনা:

এবং আপনার যদি পিএইচপি 7+ থাকে তবে কোনও সম্পত্তির নাম ভুল টাইপ করা থাকলে বা এটি বিদ্যমান না থাকলে নিম্নলিখিতগুলি নিরাপদে শূন্য হয়ে যাবে।

$path = 'foo.bar.songs.0FOOBAR.title';
echo array_reduce(explode('.', $path), function ($o, $p) { return is_numeric($p) ? ($o[$p] ?? null) : ($o->$p ?? null); }, $user);

এর সাথে অনেকগুলি অনুরূপ প্রশ্ন রয়েছে তবে এটি কিছুটা পৃথক কারণ এটি গভীর অবজেক্টের সম্পত্তি অ্যাক্সেস সম্পর্কে, কেবলমাত্র এক স্তর নয়।

ধরা যাক আমার কাছে foo.bar স্ট্রিংযুক্ত একটি ভেরিয়েবল রয়েছে।

$user = new User();
$user->foo = new Foo();
$user->foo->bar = "Hello World";

$variable = "foo.bar"

আমি $variable ব্যবহার করে $user->foo->bar প্রতিধ্বনি করতে চাই:

echo $user->foo->bar

এটি আমি এ পর্যন্ত চেষ্টা করেছি কিন্তু কোনও সাফল্য ছাড়াই (এটি NUL বলে):

$value = str_replace(".", "->", $value);
echo $user->{$value};

আমি এটিকে একটি উত্তরের প্রশংসা হিসাবে পোস্ট করছি ( কী নামগুলি দ্বারা বহু-স্তরের অ্যারে অ্যাক্সেস করার জন্য গিটার / সেটার কীভাবে লিখবেন? ) যা অ্যারেগুলির জন্য একই কাজ করে।

explode() অথবা (ফাংশনে যোগ করুন explode() মাধ্যমে $path অ্যারে তৈরি করুন, তারপরে উল্লেখগুলি ব্যবহার করুন।

$path = explode('.', $variable);

গেটার

function get($path, $object) {
    $temp = &$object;

    foreach($path as $var) {
        $temp =& $temp->$var;
    }
    return $temp;
}

$value = get($path, $user);

এবং অবশ্যই অশুভ eval() প্রস্তাবিত নয়:

$value = str_replace('.', '->', $variable);
eval("echo \$user->$value;");

পরিবর্তনশীল সম্পত্তি চিহ্নিতকরণ ( $o->$p ) ব্যবহার করে অবজেক্টের পাথ হ্রাস করা খুব সহজ:

$path = 'foo.bar';
echo array_reduce(explode('.', $path), function ($o, $p) { return $o->$p; }, $user);

এটি সহজেই একটি ছোট সহায়ক ফাংশনে রূপান্তরিত হতে পারে।


সুরকার ব্যবহার করে আপনি এই JSON প্যাকেজটি ব্যবহার করতে পারেন:

composer require machitgarha/json

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

$userJson = new MAChitgarha\Component\JSON(new User());

$userJson->set("foo", new Foo());
$userJson->set("foo.bar", "Hello World");

$userJson->get("foo.bar"); // Hello World 





properties