参见英文答案 > 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()正在创建一个基类对象相关推荐

  1. 创建一个 Dog 类继承 Thread ,每 2 秒叫一次(汪汪汪!!),创建一个 Cat 实现 Runnable 接口,每 3 秒求抚摸一次(主人快摸摸我!!),主函数(主线程)从 1 输出到 10

    题目:创建一个 Dog 类继承 Thread ,每 2 秒叫一次(汪汪汪!!),创建一个 Cat 实现 Runnable 接口,每 3 秒求抚摸一次(主人快摸摸我!!),主函数(主线程)从 1 输出到 ...

  2. 利用多态特性,创建一个手机类Phones,定义打电话的方式call,创建三个子类,并在各自的方法中重写方法,编写程序入口main()方法,实现多种手机打电话...

    |--需求说明 利用多态特性,创建一个手机类Phones,定义打电话的方式call,创建三个子类,并在各自的方法中重写方法,编写程序入口main()方法,实现两种手机打电话 |--解题思路 采用简单工 ...

  3. 虚函数之定义一个基类Shape,在此基础上派生出Rectangle和Circle再使用Rectangle类创建一个派生类Square。

    定义一个基类Shape,在此基础上派生出Rectangle和Circle,二者都有getArea( )函数计算对象的面积,再使用Rectangle类创建一个派生类Square.将getArea()改造 ...

  4. java创建一个不可变对象_如何在Java中创建不可变类?

    java创建一个不可变对象 Today we will learn about the immutable class in Java. What are immutable classes? The ...

  5. 创建一个长方形类,成员域有长方形的长和宽,成员方法有计算长方形的面积,在main方法中创建长方形类对象,并调用计算长方形面积的方法。

    package TestDemo; /** 创建一个长方形类,成员域有长方形的长和宽,成员方法有计算长方形的面积.* 在main方法中创建长方形类对象,并调用计算长方形面积的方法.*/ import ...

  6. 创建一个Customer类,类中的属性有姓名(name)、年龄(age)、性别(gender),每一个属性分别有get/set方法。然后创建两个customer对象:张立、18、女和王猛、22、男。把

    创建一个Customer类,类中的属性有姓名(name).年龄(age).性别(gender),每一个属性分别有get/set方法.然后创建两个customer对象:张立.18.女和王猛.22.男.把 ...

  7. JAVA创建一个Box类(长方体),在Box类中定义三个变量,分别表示长方体的长(length)、宽(width)和高(heigth)

    编程创建一个Box类(长方体),在Box类中定义三个变量,分别表示长方体的长(length).宽(width)和高(heigth),再定义一个方法void setBox(int l, int w, i ...

  8. 《JAVA》编程创建一个Box类(长方体),在Box类中定义三个变量

    问题:编程创建一个Box类(长方体),在Box类中定义三个变量,分别表示长方体的长(length).宽(width)和高(heigth),再定义一个方法void setBox(int l, int w ...

  9. Java练习题 类 先创建一个Point类,然后定义Trianglele类。在Trianglele类中定义三个Point的实体来表示一个三角形的三个点,然后定义两个方法求三角形的周长、面积。

    先创建一个Point类,然后定义Trianglele类. 在Trianglele类中定义三个Point的实体来表示一个三角形的三个点,再定义构造方法对这三个点进行初始化,然后定义两个方法求三角形的周长 ...

最新文章

  1. 得到Android设备的唯一id
  2. yum mysql_yum安装mysql
  3. Ruby BigDecimal库拒绝服务漏洞
  4. (九)数据结构之“图”
  5. EFCore批量操作,你真的清楚吗
  6. c语言在函数中传递指针,[求助]关于文件指针在函数中传递的问题
  7. Apollo进阶课程㉕丨Apollo规划技术详解——Optimization Inside Motion Planning
  8. c# winform TreeView与ListView的项互相拖动的应用[转载]
  9. Android NDK 剥离符号信息
  10. linux下QQ配置文件路径,Linux下QQ的使用并手动设置QQ文件保存路径
  11. Arduino、arm、树莓派、单片机四者区别和关系
  12. Servlet-JSP-课堂笔记
  13. 03-什么是Mach-O文件?
  14. 热门商业模式解剖:哪个适合中国
  15. Oracle常用字符ASCII码对应表
  16. STM32——OLED显示实验
  17. 快速拷贝文件经验及工具分享 - 天缘博客
  18. Eclipse中如何把自己写的方法封装成jar包供其他项目使用
  19. 计算机网络基础——应用层(上云必看)
  20. linux串口dtr,串口通信 DTR DSR RTS CTS

热门文章

  1. 使用Maven安装本地jar
  2. MapReduce:处理数据密集型文本处理–局部聚合第二部分
  3. 在Akka中实现主从/网格计算模式
  4. java 类似xamarin_xamarin android如何将Java.Lang.Object类型转成C#类型
  5. 道路交通安全违法行为记分管理办法的重大调整(2022版)
  6. Linux 下如何查询 tomcat 的安装目录
  7. Java short 无符号右移_char类型byte类型或short类型进行无符号右移遇到的神奇问题...
  8. python中关键字global的简单理解
  9. 深度学习基本概念笔记
  10. 双非计算机考研推荐学校传菜电梯,22考研双非院校排名Top100,前3名竟然是这几所!...