为什么 PHP 中 this 和 self 访问变量的写法不一样

首页 / 常见问题 / 低代码开发 / 为什么 PHP 中 this 和 self 访问变量的写法不一样
作者:低代码研发工具 发布时间:02-21 09:33 浏览量:1335
logo
织信企业级低代码开发平台
提供表单、流程、仪表盘、API等功能,非IT用户可通过设计表单来收集数据,设计流程来进行业务协作,使用仪表盘来进行数据分析与展示,IT用户可通过API集成第三方系统平台数据。
免费试用

在PHP中,$thisself 用于访问类内部的变量和方法,但它们的使用场景有所不同。$this 是用于非静态上下文中访问对象的实例变量和方法,而 self 是用来在静态上下文中访问类自身的静态变量和静态方法。这种区分体现了面向对象编程中实例成员与类成员访问方式的基本规则。

扩展阐述 $this 的特性,它是指向当前对象实例的指针,不能用于静态方法中,因为静态方法不需要通过对象即可调用。每当你创建一个类的实例时,$this 就会指向当前的对象实例,从而允许你访问对象的公有(public)和受保护(protected)属性与方法。当你在类的方法中使用 $this->property$this->method() 时,你实际上是在调用当前对象实例的属性和方法。

一、UNDERSTANDING $this

$this 是面向对象编程中非常重要的关键字,它总是指向当前对象,允许在实例方法中访问类的属性和方法。这意味着当你在类的内部访问非静态变量或非静态方法时,你应该使用 $this 变量,因为它们依赖于类的具体实例。

  • 访问实例变量

    当在类的方法中对属性进行操作时,使用 $this->property 可以读取或写入当前实例的属性值。

  • 调用实例方法

    类的方法通常需要在同一对象上下文中彼此交互。通过使用 $this->methodName(),你可以确保调用了作用于当前对象实例的方法。

二、EXPLORING self

$this 不同,self 是用于引用类本身而非类的某个实例。它常用于静态上下文中,即使没有创建类的实例,也可以访问类的静态属性和方法。要访问这些静态成员,你应该使用 self::propertyself::method() 形式。

  • 访问静态属性

    静态属性属于整个类,而不是类的任何单个实例。因此,修改静态属性会影响类的所有实例。使用 self:: 访问此类属性可以确保在不创建对象实例的情况下进行属性操作。

  • 调用静态方法

    静态方法可以看做是整个类的全局方法。通过使用 self::methodName() 形式,可以在没有对象上下文的情况下调用这些方法。

三、WHEN TO USE $this VERSUS self

在面向对象编程中,理解何时使用 $thisself 是至关重要的。虽然在某些情况下它们可以互换使用,如在静态方法内部调用其他静态方法,但大多数情况下,应遵循以下规则来选择适当的关键字。

  • 实例上下文中应该使用 $this

    当你处在一个实例的方法内部,并需要访问或者修改该实例的属性,或者是调用其他实例方法时,正确的选择是 $this

  • 静态上下文中应该使用 self

    如果你在编写静态方法,或者需要访问静态属性及调用静态方法,即使你知道它们不会被子类覆盖,你也应该使用 self

四、ADVANCED USAGE OF static AND parent

在使用 self 时,还有两个相关的关键字值得提及:staticparent。它们在处理类继承时非常有用,可以帮助你准确地从不同的上下文访问静态成员。

  • static 关键字

    PHP的后期静态绑定(Late Static Binding)功能允许使用 static 关键字来引用当前调用的类。在继承中,static:: 的使用优先考虑在运行时确定调用的类,对于实现多态性非常重要。

  • parent 关键字

    有时候你需要引用父类的静态成员,尤其是当子类覆盖了父类的方法或属性时。在这种情况下,使用 parent:: 来调用父类的方法或属性。

通过这些高级的使用方式,PHP提供了强大的工具来设计灵活和可重用的代码。正确地使用 $thisselfstaticparent 关键字可以帮助你充分利用面向对象编程的优势,编写出易于维护和扩展的应用程序。

相关问答FAQs:

为什么 PHP 中访问变量的写法有所不同?

在PHP中,访问变量的写法取决于变量的作用域和访问方式。其中,$this关键字用于访问当前类的实例变量,而self关键字用于访问当前类的静态变量。

为什么在 PHP 中访问实例变量要使用 $this 关键字?

在面向对象的编程中,$this关键字用于引用当前类的实例。通过使用$this关键字,我们可以在类中的方法中访问和操作该类的实例变量。这种写法可以帮助我们更加清晰地区分实例变量和其他变量,提高代码的可读性和可维护性。

为什么在 PHP 中访问静态变量要使用 self 关键字?

与实例变量不同,静态变量是与类本身相关联的,而不是与类的实例相关联。因此,在访问静态变量时,我们需要使用self关键字来引用当前类的静态变量。通过使用self关键字,我们可以确保在静态上下文中正确地访问和操作静态变量,而不会产生歧义。这种写法有助于提高代码的可读性和可维护性。

最后建议,企业在引入信息化系统初期,切记要合理有效地运用好工具,这样一来不仅可以让公司业务高效地运行,还能最大程度保证团队目标的达成。同时还能大幅缩短系统开发和部署的时间成本。特别是有特定需求功能需要定制化的企业,可以采用我们公司自研的企业级低代码平台织信Informat。 织信平台基于数据模型优先的设计理念,提供大量标准化的组件,内置AI助手、组件设计器、自动化(图形化编程)、脚本、工作流引擎(BPMN2.0)、自定义API、表单设计器、权限、仪表盘等功能,能帮助企业构建高度复杂核心的数字化系统。如ERP、MES、CRM、PLM、SCM、WMS、项目管理、流程管理等多个应用场景,全面助力企业落地国产化/信息化/数字化转型战略目标。 版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们微信:Informat_5 处理,核实后本网站将在24小时内删除。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系邮箱:hopper@cornerstone365.cn 处理,核实后本网站将在24小时内删除。

最近更新

苍穹低代码:《苍穹低代码平台功能》
02-26 17:40
Gartner低代码:《Gartner低代码魔力象限》
02-26 17:40
微信低代码:《微信低代码开发解析》
02-26 17:40
织信、积木低代码:《织信与积木低代码》
02-26 17:40
人人低代码:《人人低代码平台解析》
02-26 17:40
织信、无极低代码:《织信与无极低代码》
02-26 17:40
织信、JVS低代码平台:《织信与JVS低代码平台》
02-26 17:40
VOL低代码平台:《VOL低代码平台解析》
02-26 17:40
织信、IVX低代码开发:《织信与IVX低代码开发》
02-26 17:40

立即开启你的数字化管理

用心为每一位用户提供专业的数字化解决方案及业务咨询

  • 深圳市基石协作科技有限公司
  • 地址:深圳市南山区科技中一路大族激光科技中心909室
  • 座机:400-185-5850
  • 手机:137-1379-6908
  • 邮箱:sales@cornerstone365.cn
  • 微信公众号二维码

© copyright 2019-2024. 织信INFORMAT 深圳市基石协作科技有限公司 版权所有 | 粤ICP备15078182号

前往Gitee仓库
微信公众号二维码
咨询织信数字化顾问获取最新资料
数字化咨询热线
400-185-5850
申请预约演示
立即与行业专家交流