千家信息网

laravel中的self怎么使用

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍"laravel中的self怎么使用",在日常操作中,相信很多人在laravel中的self怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"lar
千家信息网最后更新 2026年11月02日laravel中的self怎么使用

这篇文章主要介绍"laravel中的self怎么使用",在日常操作中,相信很多人在laravel中的self怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"laravel中的self怎么使用"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

在laravel中,self关键字用于替代类名,可以引用当前类的静态成员变量和静态函数,也用于抑制多态行为,可以引用当前类的函数而非子类中覆盖的实现,self总是指向当前类以及类实例。

本文操作环境:Windows10系统、Laravel6版、Dell G3电脑。

laravel中self的用法是什么

静态成员函数内不能用 this 调用非成员函数,但可以用 self 调用静态成员函数/变量/常量;其他成员函数可以用 self 调用静态成员函数以及非静态成员函数。随着讨论的深入,发现 self 并没有那么简单。鉴于此,本文先对几个关键字做对比和区分,再总结 self 的用法。

与 parent 、 static 以及 this 的区别

要想将彻底搞懂 self ,要与 parent 、 static 以及 this 区分开。以下分别做对比。

parent

self 与 parent 的区分比较容易: parent 引用父类/基类被隐盖的方法(或变量), self则引用自身方法(或变量)。例如构造函数中调用父类构造函数:

class Base {    public function __construct() {        echo "Base contructor!", PHP_EOL;    }}class Child {    public function __construct() {        parent::__construct();        echo "Child contructor!", PHP_EOL;    }}new Child;// 输出:// Base contructor!// Child contructor!

static

static 常规用途是修饰函数或变量使其成为类函数和类变量,也可以修饰函数内变量延长其生命周期至整个应用程序的生命周期。但是其与 self 关联上是PHP 5.3以来引入的新用途:静态延迟绑定。

有了 static 的静态延迟绑定功能,可以在运行时动态确定归属的类。例如:

class Base {    public function __construct() {        echo "Base constructor!", PHP_EOL;    }    public static function getSelf() {        return new self();    }    public static function getInstance() {        return new static();    }    public function selfFoo() {        return self::foo();    }    public function staticFoo() {        return static::foo();    }    public function thisFoo() {        return $this->foo();    }    public function foo() {        echo  "Base Foo!", PHP_EOL;    }}class Child extends Base {    public function __construct() {        echo "Child constructor!", PHP_EOL;    }    public function foo() {        echo "Child Foo!", PHP_EOL;    }}$base = Child::getSelf();$child = Child::getInstance();$child->selfFoo();$child->staticFoo();$child->thisFoo();

程序输出结果如下:

Base constructor!Child constructor!Base Foo!Child Foo!Child Foo!

在函数引用上, self 与 static 的区别是:对于静态成员函数, self 指向代码当前类, static 指向调用类;对于非静态成员函数, self 抑制多态,指向当前类的成员函数, static 等同于 this ,动态指向调用类的函数。

parent 、 self 、 static 三个关键字联合在一起看挺有意思,分别指向父类、当前类、子类,有点"过去、现在、未来"的味道。

this

self 与 this 是被讨论最多,也是最容易引起误用的组合。两者的主要区别如下:

  1. this 不能用在静态成员函数中, self 可以;

  2. 对静态成员函数/变量的访问, 建议 用 self ,不要用 $this:: 或 $this-> 的形式;

  3. 对非静态成员变量的访问,不能用 self ,只能用 this ;

  4. this 要在对象已经实例化的情况下使用, self 没有此限制;

  5. 在非静态成员函数内使用, self 抑制多态行为,引用当前类的函数;而 this 引用调用类的重写(override)函数(如果有的话)。

self 的用途

看完与上述三个关键字的区别, self 的用途是不是呼之即出?一句话总结,那就是: self总是指向"当前类(及类实例)"。详细说则是:

  1. 替代类名,引用当前类的静态成员变量和静态函数;

  2. 抑制多态行为,引用当前类的函数而非子类中覆盖的实现;

槽点

  1. 这几个关键字中,只有 this 要加 $ 符号且必须加,强迫症表示很难受;

  2. 静态成员函数中不能通过 $this-> 调用非静态成员函数,但是可以通过 self:: 调用,且在调用函数中未使用 $this-> 的情况下还能顺畅运行。此行为貌似在不同PHP版本中表现不同,在当前的7.3中ok;

  3. 在静态函数和非静态函数中输出 self ,猜猜结果是什么?都是 string(4) "self" ,迷之输出;

  4. return $this instanceof static::class; 会有语法错误,但是以下两种写法就正常:
    $class = static::class;
    return $this instanceof $class;
    // 或者这样:
    return $this instanceof static;

到此,关于"laravel中的self怎么使用"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

函数 静态 成员 变量 指向 关键 关键字 多态 用途 行为 学习 输出 实例 方法 不同 三个 动态 周期 情况 更多 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海互联网科技有限公司 西安互联网科技 安徽鑫晟辉互联网科技 凡科互联网科技 智慧科技互联网 联恩商钥互联网科技有限公司 深圳互联网科技怎么样 顶级互联网科技成果有哪些 受益于互联网科技的高速发展 宁夏科技产业互联网案例 河南猎农互联网科技有限公司 昊天互联网科技有限公司 宜昌元轩互联网科技有限公司 中国科技创新与世界互联网大会 翼展科技 首家互联网医院 晋城互联网科技 工业互联网等科技实现智能化赋能 北京市互联网新科技 互联网科技平台产品运营 现代科技的标志之一的互联网 广州为想互联网科技有限公司 奇酷互联网络科技 奇酷互联网络科技公司 美国互联网黑科技 兼蜜互联网科技 北京华百购互联网科技有限公司 996高科技互联网公司 富国互联网金融科技混合基金 10位科技互联网大佬 杭州科技互联网公司有哪些
0