14、php面向对象3(final、显示调用父类构造方法、static静态变量与方法)

chatgpt/2023/10/4 7:07:09

1、如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。

<?php
class BaseClass{public function test(){echo "BaseClass::test() called".PHP_EOL;}final public function moreTesting(){echo "BaseClass::moreTesting() called".PHP_EOL;}
}class subClass extends BaseClass{public function moreTesting(){//父类声明为final,子类无法重载echo "subClass::moreTesting() called".PHP_EOL;}
}
?>

2、PHP 不会在子类的构造方法中自动的调用父类的构造方法。要执行父类的构造方法,需要在子类的构造方法中调用 parent::__construct() 。

<?php
class BaseClass{function __construct(){print "baseclass类中构造方法".PHP_EOL;}
}class SubClass extends BaseClass{function __construct(){parent::__construct();//显示调用父类构造方法print"subclass类中构造方法".PHP_EOL;}
}class OtherSubClass extends BaseClass{}$obj=new BaseClass;//父类构造方法$obj=new SubClass;//先调用父类,再调用子类$obj=new OtherSubClass;?>

执行结果:

3、static定义静态属性与方法

  • 声明类属性或方法为 static(静态),就可以不实例化类而直接访问。
  • 由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用。
  • 静态属性不可以由对象通过 -> 操作符来访问。

 

<?php
class Foo{public static $mystatic="foo";public static function staticValue(){// echo $this->$mystatic;//this在静态方法中不可用return self::$mystatic;}
}print Foo::$mystatic.PHP_EOL;$foo=new Foo;print Foo::$mystatic;//直接用类名访问静态变量
print foo::$mystatic;//用实例化对象访问静态变量
//print $foo->$mystatic;//静态属性不可以由->操作符来访问。
print $foo->staticValue().PHP_EOL;//用实例化对象访问静态方法
print Foo::staticValue().PHP_EOL;//直接用类名访问静态方法?>

运行结果:

 4、子类继承父类带有参数的构造方法。

<?php
class students{var $name,$age,$sex;function __construct($name,$age,$sex){$this->name=$name;$this->age=$age;$this->sex=$sex;}
}class master extends students{var $hobby,$address;function __construct($name,$age,$sex,$hobby,$address){parent::__construct($name,$age,$address);//执行父类构造方法$this->hobby=$hobby;$this->address=$address;}}
$m=new master("PHP","20","female","ok","usa");
?>

PHP是世界上最好的编程语言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-5313393.html

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

【iOS】Cydia Impactor 错误:file http.hpp; line:37; what: _assert(code == 200)

Cydia Impactor 报错&#xff0c;信息如下 file http.hpp; line:37; what: _assert(code 200)解决方案&#xff1a;Cydia Impactor 已被弃用&#xff0c;切换到sideloadly 即可&#xff0c;亲测成功&#xff0c;并且支持双重验证登录 csdn备份地址 HERE

基于canvas画布的实用类Fabric.js的使用

目录 前言 一、Fabric.js简介 二、开始 1、引入Fabric.js 2、在main.js中使用 3、初始化画布 三、方法 四、事件 1、常用事件 2、事件绑定 3、事件解绑 五、canvas常用属性 六、对象属性 1、基本属性 2、扩展属性 七、图层层级操作 八、复制和粘贴 1、复制 2…

C++复刻:[流光按钮]+[悬浮波纹按钮]

目录 参考效果实现main.cppdialog.hdialog.cppflowingRayButton.h 流动光线按钮flowingRayButton.cpp 流动光线按钮hoveringRippleButton.h 悬浮波纹按钮hoveringRippleButton.cpp 悬浮波纹按钮模糊知识点 源码 参考 GitHub地址 B站主页 效果 实现 main.cpp #include "…

一起学算法(枚举篇)

概念 枚举&#xff1a;就是把满足题目条件的所有情况都列举出来&#xff0c;然后一一判断寻找最优解的过程 1.最值问题 1.两个数的最值问题 两个数的最小值&#xff0c;利用Java的运算符就可以实现 int Min(int a,int b){return a<b?a:b; } 2.n个数的最值问题 当有n…

实用上位机--QT

实用上位机–QT 通信协议如下 上位机设计界面 #------------------------------------------------- # # Project created by QtCreator 2023-07-29T21:22:32 # #-------------------------------------------------QT += core gui serialportgreaterThan(QT_MAJOR_V…

oracle数据库dbLink的使用

Oracle的数据库链路&#xff08;dbLink&#xff09;是一种允许在两个不同的数据库实例之间进行通信和数据交换的功能。它可以让你在一个数据库中访问另一个数据库的对象和数据&#xff0c;就像它们属于同一个数据库一样。 创建一个link: CREATE public DATABASE LINK link_sco…

【数据结构篇C++实现】- 图

友情链接&#xff1a;C/C系列系统学习目录 文章目录 &#x1f680;一、图的基本概念和术语1、有向图和无向图3、基本图和多重图4、完全图5、子图6、连通、连通图和连通分量7、强连通图、强连通分量8、生成树、生成森林9、顶点的度、入度和出度10、边的权和网11、稠密图、稀疏图…

狄耐克带着爱与希望,踏上了又一段关于奉献的旅程

路在脚下&#xff0c; 狄耐克紧盯科技前沿&#xff0c; 聚焦国家发展战略和人民美好生活需要&#xff0c; 在智慧社区和智慧医院领域 敢于筑梦、勇于追梦、勤于圆梦&#xff1b; 心系远方&#xff0c; 狄耐克真情投入奉献事业&#xff0c; 将爱与希望的种子撒向全国各地…
推荐文章