位置: 编程技术 - 正文

浅谈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文件修改后,打开还是显示以前的页面)

  • 企业所得税汇算清缴时间
  • 社保工伤保险可以交两家公司吗
  • 科目余额表凭证号顺序
  • 个人所得税减除费用6万元什么意思
  • 个体户一个月能领多少发票
  • 实缴注册资本交税吗
  • 自己打印raz
  • 高铁费可抵扣适用税吗
  • 房企与个人订立购房合同是否贴花?
  • 善意接受虚开发票只能自认倒霉么
  • 赠送固定资产会计处理
  • 房租抵扣个税需要提供发票吗
  • 权益法下股权投资
  • 盈余公积要是提多了能转回么
  • 补助属不属于工资
  • 投资公司收回投资款
  • 增值税纳税表销售额的填写
  • 调用核心征管失败是什么意思
  • 增值税减免税款科目怎么结转
  • 专项应付款贷方是什么意思
  • 金融服务收入怎么算
  • 业务宣传费和广告费计入什么科目
  • 英雄联盟电脑软件图片
  • 华为鸿蒙怎么看手机型号
  • 商业意外险进项可以抵扣吗
  • 固定资产报废能报保险公司理赔吗
  • php数组有哪几种类型
  • vben admin框架怎么实现上传文件时拿到文件参数
  • mt-mon.exe
  • 自制原始凭证包括哪些凭证
  • 债券利息计算表
  • regsrv.exe - regsrv是什么进程 有什么用
  • 公司其他费用包括哪些费用
  • 工业企业的费用
  • 发票开具时限是怎么规定的
  • PHP:imagealphablending()的用法_GD库图像处理函数
  • 什么情况下增长率是0
  • zend framework手册
  • 前端vue面试题2020
  • opencv如何显示图片
  • 一般纳税人按简易办法计税销售额
  • 怎么从营业执照判断是一般纳税人
  • 累计销售额怎么算
  • ibm db2认证
  • 对公账户发票和普通发票不一样吗
  • 增值税纳税申报表在哪里查询
  • 零申报公司注销流程
  • 个人缴纳职业年金的比例为本人缴费工资的多少
  • 个体工商户定期定额怎么报税
  • 每月工资不一样怎么算误工费呢
  • 建筑业无票收入收货款分录
  • 存货抵债如何做分录
  • 专用发票与普通发票图片
  • 账户验证费会计分录
  • 猪肉蔬菜是免税农产品吗
  • 通信费抬头为个人
  • sql游标实例
  • sql2005 存储过程 某个字段小于某个值时变颜色
  • .ccc是什么文件
  • xp无法进入桌面怎么办
  • mac怎么设置默认打开方式
  • linux ioctrl
  • winhelp.exe - winhelp是什么进程
  • 进入注册表的快捷键
  • 重装win7系统后鼠标键盘不能用
  • linux计划任务不生效
  • windows多屏显示
  • 获取windows的最新信息
  • win8系统谷歌浏览器打不开
  • 利用命令查看虚拟机的信息
  • ExtJs扩展之GroupPropertyGrid代码
  • fragment的context
  • jquery添加id属性
  • javascript 进阶篇1 正则表达式,cookie管理,userData
  • js跨域的几种方法
  • jquery.js插件
  • 境外承包工程款收入
  • 个税完税证明在哪里开具
  • 增值税发票不够用怎么增票
  • 电子税务局网上登录
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设