Mah*_*r13 3 php oop class this self
可能重复:
PHP:self vs. $ this
我发现我可以通过$ this :: prefix调用类方法.例:
class class1 {
public function foo()
{
echo "1";
}
public function bar()
{
$this::foo();
//in this example it acts like $this->foo() and displays "2"
//using self::foo() displays "1"
}
}
class class2 {
public function foo()
{
echo "2";
}
public function bar()
{
class1::bar();
}
}
$obj = new class2();
$obj->bar(); // displays "2"
class1::bar(); // Fatal error
Run Code Online (Sandbox Code Playgroud)
我想知道使用$ this->和$ this :: prefixes调用方法的差异.
ps:在这个链接中有一个关于$ this-> foo()和self :: foo()差异的页面: 何时使用self超过$ this?
您链接的答案会告诉您确切要查找的内容;).
基本上,有两个概念,有些人很难区分编程语言:对象和类.
一堂课是抽象的.它定义了一个对象的结构.如果对象是从该类构建的,则对象将包含的属性和方法.创建对象就是您打电话时所做的事情new class1().这是指示PHP使用class1类中的所有属性和方法创建一个新对象.
关于创建对象的重要注意事项是它也有自己的范围.这真是$ this vs static ::(注意:不要使用self ::或$ this ::,请使用static ::(稍后详细介绍))进来玩.使用$this是指示PHP访问当前对象的属性和方法.使用static::是指示PHP访问构造对象的基类的属性和方法.
这是一个例子:
class MyClass {
public $greeting;
public static $name;
public greet() {
print $this->greeting . " " . static::$name;
}
}
$instance1 = new MyClass();
$instance1->greeting = 'hello';
$instance2 = new MyClass();
$instance2->greeting = 'hi';
MyClass::$name = 'Mahoor13';
$instance1->greet();
$instance2->greet();
Run Code Online (Sandbox Code Playgroud)
我没有测试上面的内容,但你应该得到:
你好Mahoor13 hi Mahoor13
这应该给出设置类属性和设置实例属性之间的区别的一般概念.如果您需要其他帮助,请与我们联系.
编辑
$ this ::似乎只是PHP处理作用域的副作用.我不认为它有效,我不会使用它.它似乎没有任何支持.
在$这个- >从实例调用,所以你必须有对象的实例来使用这个调用。
但是$ this ::是类中的静态方法,您可以在没有实例的情况下调用它,因此您无需分配该类的实例来调用它
myclass::doFoo();
public static function doFoo(){ .... }
Run Code Online (Sandbox Code Playgroud)
并且do函数应该是静态函数,这样才能调用它,否则php在较新的版本中会出错
| 归档时间: |
|
| 查看次数: |
483 次 |
| 最近记录: |