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();
  • 相关阅读:
    UIButton组件
    九宫格
    window对象的创建
    UILabel的属性及方法
    javascript相关,格式转化
    MySQL分区分表相关知识摘要
    redis简单笔记
    PHP常用设计模式
    在nginx上面部署多个项目
    把自己的项目上传到svn上面
  • 原文地址:https://www.cnblogs.com/alsf/p/9621002.html
Copyright © 2011-2022 走看看