位置: 编程技术 - 正文

浅谈Laravel中的一个后期静态绑定(laravel enum)

编辑:rootadmin

推荐整理分享浅谈Laravel中的一个后期静态绑定(laravel enum),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:laravel yield,laravel有什么用,laravel特点,laravel enum,laravel vendor,laravel有什么用,laravel有什么用,laravel有什么用,内容如对您有帮助,希望把文章链接给更多的朋友!

关于 PHP 的 new static 延迟静态绑定,或者叫后期静态绑定,在 Laravel 中遇到一个使用上的问题。如下,在 Laravel 中调用 Model 新增数据的时候,首先给 Model 加了一个获取分表的方法:

这里 setTable 方法是在 Model 里定义的获取分表的方法:

从报错日志中发现 $this->table 并没有生效,但实际上在调用 create 方法之前打印表名的时候是期望的值,这里调用 create 方法为什么 $this->table 没有被重置呢?

这里 $this->message 是一个继承 Model 类的模型类,其中 create 方法:

位于 vendorlaravelframeworksrcIlluminateDatabaseEloquentModel.php Line .

因为 Laravel 框架的这个 Model 类是一个 abstract 类型,PHP 中 abstract 类可以用 new static 后期静态绑定的方式实例化,而 create 方法里 $model = new static($attributes) 实际上就是重新实例化了并返回,而调用者 Model 类没有定义 table 属性,所以这个时候 $this->table 是没有值的。

浅谈Laravel中的一个后期静态绑定(laravel enum)

解决办法是用 save 方法即可,如图所示。实际上 create 方法也调用了 save 方法。

实验

一个抽象类 A,有个 create 方法,通过延迟静态绑定实例化并返回。B 类继承 A,test 方法中修改父类的 name 属性。

结果显示 $obj1 和 $obj2 这两个实例都是 B 的实例,调用 test 方法属性 name 改变了,但是调用 create 方法后,name 属性并没有改变。 这也就是在本文中说的在 Lavarel 中遇到的场景。 (这里如果把注释打开,打印的 name 就是重写的值)

如果把抽象类 A 改成普通类,new static 改成 new self 的方式实例化,结果就不同了,打印的属性 name 都是各自类的属性。

参考链接

PHP:后期静态绑定

PHP中new self()和new static()的区别

标签: laravel enum

本文链接地址:https://www.jiuchutong.com/biancheng/289977.html 转载请保留说明!

上一篇:浅谈PHP中new self()和new static()的区别(php use function)

下一篇:php readfile()修改文件上传大小设置(php文件修改后,打开还是显示以前的页面)

  • 本年计算扣除限额的基数怎么算
  • 等线支付给劳务派遣单位的工资怎么做账
  • 固定资产接受捐赠的计入什么科目
  • 年末暂估下年怎么入账
  • 净资本和净资产区别
  • 小规模交了增值税还要交什么
  • 社会组织属于非法人组织吗为什么
  • 资产负债表的资产方能够提供的信息包括
  • 出口发票金额和备注了差了1分钱
  • 已抵扣红字发票信息表怎么开
  • 为何要简并增值税税率?
  • 红字冲回上月收入
  • 运费发票没有开 怎么做到成本
  • 主营业务成本没有结转怎么办
  • 网络直播应如何缴纳增值税?
  • 一般纳税人转小规模怎么办理
  • 未抵扣增值税入什么科目
  • 毛利润和纯利润的计算公式
  • 电脑运行慢怎么清理c盘
  • 银行存款和账面的关系
  • php创建表单
  • 境外人员定义
  • PHP:Memcached::getMultiByKey()的用法_Memcached类
  • PHP:rawurlencode()的用法_url函数
  • 企业所得税会计准则
  • 重楼的功效与作用价格
  • 税盘可以全额抵扣是什么意思
  • 资本公积和盈余公积的提取比例
  • 使用二氧化碳灭火器时人应该站在什么位置
  • 运城盐湖中国死海养生城
  • thinkphp框架入门
  • setenforce 0命令
  • php类的作用
  • 业务经费包括哪些内容
  • 为什么要扩展
  • 固定资产折完了怎么办
  • 如何根据营业执照核定税种
  • 租赁收入的成本包括哪些
  • 现金折扣属于什么
  • 销售bu是什么意思
  • mysql drop from
  • 经营性存款人罚款
  • 金税盘抵扣的结转会计分录
  • 期末汇兑损益的输入方式
  • 租出的固定资产
  • 一次摊销法的账务处理
  • 河道工程修建维护管理费何时开始停征?
  • 支付宝已经支付快递费怎么还支付
  • 小规模企业开具增值税专用发票
  • 出口退税包括
  • 收到税务局退回的个税手续费怎么入账
  • 进项发票认证多了留抵多久
  • 为什么预付账款可以通过应付账款核算
  • 电子承兑追索清偿的顺序
  • 所得税核算的三种方法
  • 收到红字增值税发票哪里查
  • 企业进口外汇额度限制
  • 固定资产怎么录入系统
  • 什么计提折旧什么不计提折旧
  • mysql在查询结果中查询
  • centos7如何扩展根分区空间
  • 笔记本电脑bios更新
  • win8删除所有文件
  • 升级怎么玩
  • windows xp无法访问samba共享夹
  • 如何限制网速不让孩子玩游戏
  • dpd参数
  • 在linux中使用什么可以执行shell脚本
  • threejs加载obj模型颜色不对
  • 有关于js构造函数的题
  • android升级是什么意思
  • 批处理字符串截取
  • node.js ts
  • OnBecameVisible和OnBecameInvisible ,OnWillRenderObject
  • adb远程调试工具
  • javascript核心技术
  • 江西省国家税务局李德平
  • 如何理解计算消费税时的(1
  • 普通发票红冲税务规定
  • 本期实际抵扣税金怎么算
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设