নিম্নলিখিত কোড:
<?php
class Type {
}
function foo(Type $t) {
}
foo(null);
?>
রান সময় ব্যর্থ:
PHP Fatal error: Argument 1 passed to foo() must not be null
অন্য ভাষার মতো নালিকা কেন পাস করার অনুমতি নেই?
নিম্নলিখিত কোড:
<?php
class Type {
}
function foo(Type $t) {
}
foo(null);
?>
রান সময় ব্যর্থ:
PHP Fatal error: Argument 1 passed to foo() must not be null
অন্য ভাষার মতো নালিকা কেন পাস করার অনুমতি নেই?
উত্তর:
পিএইচপি 7.1 বা আরও নতুন (২ রা ডিসেম্বর ২০১ 2016 প্রকাশিত হয়েছে)
আপনি null
এই সিনট্যাক্সের সাথে সুস্পষ্টভাবে একটি পরিবর্তনশীল ঘোষণা করতে পারেন
function foo(?Type $t) {
}
এর ফলে হবে
$this->foo(new Type()); // ok
$this->foo(null); // ok
$this->foo(); // error
সুতরাং, আপনি যদি একটি alচ্ছিক যুক্তি চান তবে আপনি কনভেনশনটি অনুসরণ করতে পারেন Type $t = null
তবে আপনার যদি কোনও যুক্তি তৈরি করার দরকার হয় তবে উভয়কেই গ্রহণ করুনnull
এবং তার ধরণের উপরের উদাহরণটি অনুসরণ করতে পারেন।
আপনি এখানে আরও পড়তে পারেন ।
পিএইচপি 7.0 বা তার বেশি বয়সী
আপনাকে একটি ডিফল্ট মান যুক্ত করতে হবে
function foo(Type $t = null) {
}
এইভাবে, আপনি এটি একটি নাল মান পাস করতে পারেন।
প্রকারের ঘোষণাপত্র সম্পর্কে ম্যানুয়ালটিতে বিভাগে এটি নথিভুক্ত করা হয়েছে :
NULL
যদি প্যারামিটারের ডিফল্ট মান সেট করা থাকে তবে মানগুলি মানতে ঘোষণা করা যেতে পারেNULL
।
function foo(Type $t)
এটি একটি খুব ভাল জিনিস; দেখতে নাল তথ্যসূত্র: বিলিয়ন ডলারের ভুল
পিএইচপি .1.১ থেকে শুরু করে , ফাংশন রিটার্নের ধরণ এবং পরামিতি উভয় হিসাবে নলযোগ্য প্রকারগুলি উপলব্ধ। প্রকারের ?T
নির্দিষ্ট প্রকারের মান থাকতে পারে T
, বা null
।
সুতরাং, আপনার ফাংশনটি এর মতো দেখতে পেল:
function foo(?Type $t)
{
}
যত তাড়াতাড়ি আপনি পিএইচপি 7.1 এর সাথে কাজ করতে পারবেন, এই স্বরলিপিটি পছন্দ করা উচিত function foo(Type $t = null)
, কারণ এটি এখনও কলারটিকে প্যারামিটারের জন্য স্পষ্টভাবে একটি যুক্তি নির্দিষ্ট করতে বাধ্য করে $t
।
ইতিমধ্যে উল্লিখিত অন্যান্য উত্তর হিসাবে, আপনি নির্দিষ্ট করে থাকলে এটি কেবলমাত্র সম্ভব null
ডিফল্ট মান হিসাবে ।
তবে সবচেয়ে পরিষ্কার টাইপ-সেফ অবজেক্ট ওরিয়েন্টেড সলিউশন হ'ল নালবজেক্ট :
interface FooInterface
{
function bar();
}
class Foo implements FooInterface
{
public function bar()
{
return 'i am an object';
}
}
class NullFoo implements FooInterface
{
public function bar()
{
return 'i am null (but you still can use my interface)';
}
}
ব্যবহার:
function bar_my_foo(FooInterface $foo)
{
if ($foo instanceof NullFoo) {
// special handling of null values may go here
}
echo $foo->bar();
}
bar_my_foo(new NullFoo);
NullFoo
বিমূর্ত পদ্ধতি ওভাররাইড করতে বাধ্য করে , যদিও তাদের কোনও অর্থ নেই (সংজ্ঞায়িত করে null
)।
if (something is null)
চেকগুলি এড়ানো বোঝানো হয়েছে , যেহেতু নুলঅবজেক্টটি একটি অ-বিদ্যমান মানের সমস্ত আচরণ coverেকে রাখার জন্য এবং বাইরের কোনও সহযোগীকে কোনও বিষয়ে আগ্রহী হওয়ার প্রয়োজন হবে না অবজেক্ট অ-বিদ্যমান (নাল) বা না।