বাম অংশটি যখন কোনও অবজেক্ট উদাহরণস্বরূপ থাকে তখন আপনি ব্যবহার করেন ->
। অন্যথায়, আপনি ব্যবহার ::
।
এর অর্থ এটি ->
বেশিরভাগ ক্ষেত্রে অ্যান্সেস সদস্যদের অ্যাক্সেস করতে ব্যবহৃত হয় (যদিও এটি স্ট্যাটিক সদস্যদের অ্যাক্সেসের জন্যও ব্যবহার করা যেতে পারে, যেমন ব্যবহার নিরুৎসাহিত করা হয়), ::
সাধারণত স্থির সদস্যদের অ্যাক্সেস করতে ব্যবহৃত হয় (যদিও কয়েকটি বিশেষ ক্ষেত্রে এটি উদাহরণস্বরূপ সদস্যদের অ্যাক্সেস করতে ব্যবহৃত হয়) )।
সাধারণভাবে, ::
জন্য ব্যবহার করা হয় সুযোগ রেজল্যুশন , এবং এটি থাকতে পারে পারেন একটি বর্গ নাম, parent
, self
, অথবা (পিএইচপি 5.3 মধ্যে) static
তার বাম দিকে। parent
শ্রেণীর এটি ব্যবহৃত হয় যেখানে সুপারক্লাসের সুযোগকে বোঝায়; self
শ্রেণীর যেখানে এটি ব্যবহৃত হয়েছে তার ক্ষেত্রকে বোঝায়; static
"স্কোপ" বলে উল্লেখ করে ( দেরিতে স্থির বাইন্ডিংগুলি দেখুন )।
নিয়মটি হল যে সহ একটি কল ::
একটি উদাহরণ কল যদি এবং কেবল যদি:
- লক্ষ্য পদ্ধতি স্থির হিসাবে ঘোষণা করা হয় না এবং
- কল করার সময় একটি সামঞ্জস্যপূর্ণ অবজেক্ট প্রসঙ্গ রয়েছে, যার অর্থ এগুলি অবশ্যই সত্য হতে পারে:
- কলটি এমন একটি প্রসঙ্গ থেকে করা হয়েছে যেখানে
$this
উপস্থিত রয়েছে এবং
- এর শ্রেণিটি
$this
হয় হয় পদ্ধতির শ্রেণি বলা হয় বা এটির একটি সাবক্লাস।
উদাহরণ:
class A {
public function func_instance() {
echo "in ", __METHOD__, "\n";
}
public function callDynamic() {
echo "in ", __METHOD__, "\n";
B::dyn();
}
}
class B extends A {
public static $prop_static = 'B::$prop_static value';
public $prop_instance = 'B::$prop_instance value';
public function func_instance() {
echo "in ", __METHOD__, "\n";
/* this is one exception where :: is required to access an
* instance member.
* The super implementation of func_instance is being
* accessed here */
parent::func_instance();
A::func_instance(); //same as the statement above
}
public static function func_static() {
echo "in ", __METHOD__, "\n";
}
public function __call($name, $arguments) {
echo "in dynamic $name (__call)", "\n";
}
public static function __callStatic($name, $arguments) {
echo "in dynamic $name (__callStatic)", "\n";
}
}
echo 'B::$prop_static: ', B::$prop_static, "\n";
echo 'B::func_static(): ', B::func_static(), "\n";
$a = new A;
$b = new B;
echo '$b->prop_instance: ', $b->prop_instance, "\n";
//not recommended (static method called as instance method):
echo '$b->func_static(): ', $b->func_static(), "\n";
echo '$b->func_instance():', "\n", $b->func_instance(), "\n";
/* This is more tricky
* in the first case, a static call is made because $this is an
* instance of A, so B::dyn() is a method of an incompatible class
*/
echo '$a->dyn():', "\n", $a->callDynamic(), "\n";
/* in this case, an instance call is made because $this is an
* instance of B (despite the fact we are in a method of A), so
* B::dyn() is a method of a compatible class (namely, it's the
* same class as the object's)
*/
echo '$b->dyn():', "\n", $b->callDynamic(), "\n";
আউটপুট:
বি ::। প্রপ_স্ট্যাটিক: বি ::। প্রপ_স্ট্যাটিক মান
বি :: ফানক_স্ট্যাটিক (): বি :: ফানক_স্ট্যাটিক
$ b-> প্রোপ_ইনস্ট্যান্স: বি :: $ প্রোপ_ইনস্ট্যান্স মান
$ বি-> ফানক_স্ট্যাটিক (): বি :: ফানক_স্ট্যাটিক
$ B-> func_instance ():
in B :: func_instance
এ এ :: ফানক ইনস্ট্যান্স
এ এ :: ফানক ইনস্ট্যান্স
$ A-> Dyn ():
এ :: কল-ডায়নামিক
গতিশীল গতিতে (__callStatic)
$ B-> Dyn ():
এ :: কল-ডায়নামিক
গতিশীল গতিতে (__call)