php 继承内核中的基类,继承类上的PHP new self()正在创建一个基类对象
参见英文答案 > New self vs. new static 3个
我有一个充当基类的类.然后我有几个继承它的类.我想开始使用静态语法加载继承的类,但行为没有多大意义.
直到现在我加载了这样的类,它完成了这项工作.
$obj = new foo();
$something = $obj->ByID(1);
我希望能够像这样调用ByID函数.
$something = foo::Get()->ByID(1);
上面的代码是有效的,但它没有调用继承的类,它正在加载基类.我想我可以看出为什么会这样,但它没有任何意义.在.NET中,“this”将始终应用于继承的对象,但它在这里对我不起作用.
我有一个基类栏,使用以下方法.这不会在继承的类中被覆盖.实际上,继承的类只包含1个单独的属性.
class bar
{
public $directory;
public function Get()
{
return new self();
}
public function ByID($id)
{
//get the record from the file by using $directory to find the file.
}
}
class foo extends bar
{
public $directory = "/something/";
}
我遇到的问题是,当我以静态方式加载类时,self()返回基类的对象而不是继承的类.我需要继承类的$directory属性.继承的类当然会包含其他函数和其他东西,但是现在这是阻止我实现这样的代码的障碍.知道我做错了什么吗?
我不想在每个继承的类中重写Get().使用laravel,我可以记住具有类似结构的模型类,您可以创建一个具有1个属性的模型,该属性是表的名称,并且不知何故它都工作正常.
解决方法:
请改用静态绑定.
public static function Get() {
return new static();
}
标签:php,inheritance
来源: https://codeday.me/bug/20190628/1311429.html
php 继承内核中的基类,继承类上的PHP new self()正在创建一个基类对象相关推荐
- 创建一个 Dog 类继承 Thread ,每 2 秒叫一次(汪汪汪!!),创建一个 Cat 实现 Runnable 接口,每 3 秒求抚摸一次(主人快摸摸我!!),主函数(主线程)从 1 输出到 10
题目:创建一个 Dog 类继承 Thread ,每 2 秒叫一次(汪汪汪!!),创建一个 Cat 实现 Runnable 接口,每 3 秒求抚摸一次(主人快摸摸我!!),主函数(主线程)从 1 输出到 ...
- 利用多态特性,创建一个手机类Phones,定义打电话的方式call,创建三个子类,并在各自的方法中重写方法,编写程序入口main()方法,实现多种手机打电话...
|--需求说明 利用多态特性,创建一个手机类Phones,定义打电话的方式call,创建三个子类,并在各自的方法中重写方法,编写程序入口main()方法,实现两种手机打电话 |--解题思路 采用简单工 ...
- 虚函数之定义一个基类Shape,在此基础上派生出Rectangle和Circle再使用Rectangle类创建一个派生类Square。
定义一个基类Shape,在此基础上派生出Rectangle和Circle,二者都有getArea( )函数计算对象的面积,再使用Rectangle类创建一个派生类Square.将getArea()改造 ...
- java创建一个不可变对象_如何在Java中创建不可变类?
java创建一个不可变对象 Today we will learn about the immutable class in Java. What are immutable classes? The ...
- 创建一个长方形类,成员域有长方形的长和宽,成员方法有计算长方形的面积,在main方法中创建长方形类对象,并调用计算长方形面积的方法。
package TestDemo; /** 创建一个长方形类,成员域有长方形的长和宽,成员方法有计算长方形的面积.* 在main方法中创建长方形类对象,并调用计算长方形面积的方法.*/ import ...
- 创建一个Customer类,类中的属性有姓名(name)、年龄(age)、性别(gender),每一个属性分别有get/set方法。然后创建两个customer对象:张立、18、女和王猛、22、男。把
创建一个Customer类,类中的属性有姓名(name).年龄(age).性别(gender),每一个属性分别有get/set方法.然后创建两个customer对象:张立.18.女和王猛.22.男.把 ...
- JAVA创建一个Box类(长方体),在Box类中定义三个变量,分别表示长方体的长(length)、宽(width)和高(heigth)
编程创建一个Box类(长方体),在Box类中定义三个变量,分别表示长方体的长(length).宽(width)和高(heigth),再定义一个方法void setBox(int l, int w, i ...
- 《JAVA》编程创建一个Box类(长方体),在Box类中定义三个变量
问题:编程创建一个Box类(长方体),在Box类中定义三个变量,分别表示长方体的长(length).宽(width)和高(heigth),再定义一个方法void setBox(int l, int w ...
- Java练习题 类 先创建一个Point类,然后定义Trianglele类。在Trianglele类中定义三个Point的实体来表示一个三角形的三个点,然后定义两个方法求三角形的周长、面积。
先创建一个Point类,然后定义Trianglele类. 在Trianglele类中定义三个Point的实体来表示一个三角形的三个点,再定义构造方法对这三个点进行初始化,然后定义两个方法求三角形的周长 ...
最新文章
- 得到Android设备的唯一id
- yum mysql_yum安装mysql
- Ruby BigDecimal库拒绝服务漏洞
- (九)数据结构之“图”
- EFCore批量操作,你真的清楚吗
- c语言在函数中传递指针,[求助]关于文件指针在函数中传递的问题
- Apollo进阶课程㉕丨Apollo规划技术详解——Optimization Inside Motion Planning
- c# winform TreeView与ListView的项互相拖动的应用[转载]
- Android NDK 剥离符号信息
- linux下QQ配置文件路径,Linux下QQ的使用并手动设置QQ文件保存路径
- Arduino、arm、树莓派、单片机四者区别和关系
- Servlet-JSP-课堂笔记
- 03-什么是Mach-O文件?
- 热门商业模式解剖:哪个适合中国
- Oracle常用字符ASCII码对应表
- STM32——OLED显示实验
- 快速拷贝文件经验及工具分享 - 天缘博客
- Eclipse中如何把自己写的方法封装成jar包供其他项目使用
- 计算机网络基础——应用层(上云必看)
- linux串口dtr,串口通信 DTR DSR RTS CTS
热门文章
- 使用Maven安装本地jar
- MapReduce:处理数据密集型文本处理–局部聚合第二部分
- 在Akka中实现主从/网格计算模式
- java 类似xamarin_xamarin android如何将Java.Lang.Object类型转成C#类型
- 道路交通安全违法行为记分管理办法的重大调整(2022版)
- Linux 下如何查询 tomcat 的安装目录
- Java short 无符号右移_char类型byte类型或short类型进行无符号右移遇到的神奇问题...
- python中关键字global的简单理解
- 深度学习基本概念笔记
- 双非计算机考研推荐学校传菜电梯,22考研双非院校排名Top100,前3名竟然是这几所!...