Code examples of non-forwarded calls and forwarded calls in PHP

不言
Release: 2023-04-03 17:54:01
Original
2512 people have browsed it

This article brings you code examples about non-forwarding calls and forwarding calls in PHP. It has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.

Static access to members of a class:

1. Non-forwarded call

1) Clear class name (A::funcA())

2. Forward call

    1)self::
    2)parent::
    3)static::
    4)forward_static_call()
    5)get_called_class()
Copy after login

Note:
"Late binding" means that static:: is no longer parsed into the class in which the current method is defined, but is actually run calculated at time. It can also be called "static binding" because it can be used for (but is not limited to) calls to static methods.

<?php
class A {
    public static function foo() {
        static::who();
    }

    public static function who() {
        echo __CLASS__."\n";
    }
}

class B extends A {
    public static function test() {
        A::foo();
        parent::foo();
        self::foo();
    }

    public static function who() {
        echo __CLASS__."\n";
    }
}
class C extends B {
    public static function who() {
        echo __CLASS__."\n";
    }
}

C::test();
?>
Copy after login
running results:
A
C
C
Copy after login
Note:
In a non-static environment, the called class is the class to which the object instance belongs. Since $this-> will try to call the private method in the same scope, static:: may give different results. Another difference is that static:: can only be used with static properties.

The inherited property belongs to you

The inheritance chain gives priority to accessing the current class, accessing according to the reserved word characteristics, and then accessing according to the inheritance chain.

$this Access member (calling context)

self:: Access member (parsing context)

<?php
 
class A{
    protected $value = "A value";
 
    public function printValue(){
        echo $this->value;
    }
}
class B extends A{
   protected $value = "B value";
}
$app = new B();
$app->printValue();
Copy after login
运行结果:B value
Copy after login
<?php
 
class A{
    //只有将属性定义为静态的才能使用self::进行调用
    static protected $value = "A static value ";
    public function printValue(){
        echo self::$value;
    }
}
 
class B extends A{
    static protected $value = "B static value";
}
 
$app = new B();
$app->printValue();
Copy after login
运行结果:A static value
Copy after login
Copy after login
<?php
class A{
    static protected $value = "A static value ";
}
 
class B extends A{
    public function printValue(){
        echo self::$value;
    }
}
$app = new B();
$app->printValue();
Copy after login
运行结果:A static value
Copy after login
Copy after login

Related recommendations:

PHP wants How to implement page jump function? (Example of function tags)

How to implement drop-down menus and multi-level columns in php? (Actual code test)

Code for uploading image files to the server by combining php and html

The above is the detailed content of Code examples of non-forwarded calls and forwarded calls in PHP. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template