Home  >  Article  >  Backend Development  >  Code examples of non-forwarded calls and forwarded calls in PHP

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

不言
不言Original
2018-08-10 10:37:262514browse

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()

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();
?>
running results:
A
C
C
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();
运行结果:B value
<?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();
运行结果:A static value
<?php
class A{
    static protected $value = "A static value ";
}
 
class B extends A{
    public function printValue(){
        echo self::$value;
    }
}
$app = new B();
$app->printValue();
运行结果:A static value

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!

Statement:
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