zoukankan      html  css  js  c++  java
  • PHP类中self和$this的区别

    1.self代表类,$this代表对象
    2.能用$this的地方一定使用self,能用self的地方不一定能用$this
    静态的方法中不能使用$this,静态方法给类访问的。

    今天在使用静态方法的时候,使用了$this去调用对象的属性,导致曝出错误信息,在网上查询了手册和百度,

    发现大部分回答只是说明了在静态方法中不允许使用$this,只能使用self,较为靠谱的回答说明是$this是实例化对象的指针,self是对象的指针。

    针对以上信息,综合自己的学习知识和网上搜索结果作下图:

    其中,我们可以明显看到,self调用的类的指针,而非实例化后的对象指针,静态变量和静态方法始终属于类,而非属于实例化后的对象,因此在静态方法中无法使用$this,因为此时所处的位置是类所在的指针,只能使用self调用静态方法或者静态变量。

    如果要在静态方法中,强制使用函数的其他方法,则只能先实例化一个新的对象,然后再使用该对象的方法。

    综上所述,self调用的是类,而$this调用的则是实例化的对象。下面是代码。

    <?php
    class demo {
        public $a;
        public $b;
        public static $c = 100;
     
        public function __construct($a) {
            $this->a = $a;
            $this->funct();
        }
     
        public static function func() {
            $newObj = new self(20);
            $newObj->funct();
            self::$c += 100;
            echo self::$c;
        }
     
        private function funct() {
            $this->b = $this->a * 200;
        }
     
        public function getC() {
                echo  self::$c;
        }
    }
     
    $demo = new demo(3);
    $demo::func();
    $demo::getC();
    $demo2 = new demo(4);
    $demo2::func();
    $demo::getC();
    $demo2::getC();
    $demo->getC();
  • 相关阅读:
    Java Arrays.asList注意事项
    从给定的N个正数中选取若干个数之和最接近M
    java 8 foreach获取索引
    更优雅地关闭资源
    idea 下获取路径下文件的方法
    IDEA类和方法注释模板设置(非常详细)
    503 Error: need EHLO and AUTH first
    fatal error C1083: Cannot open include file: 'openssl/opensslv.h'
    'pip' 不是内部或外部命令
    JS中every()和some()的用法
  • 原文地址:https://www.cnblogs.com/alsf/p/9621002.html
Copyright © 2011-2022 走看看