位置: 编程技术 - 正文

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

  • 所得税调增调减项目有哪些
  • 国际快递货运
  • 生产成本和制造费用的账务处理
  • 增值税普票可以开给个人吗
  • 国家电子产品投诉电话
  • 固定资产清理时残值怎么处理
  • 没有纸质机票电子行程单电子版可以报销吗
  • 赠送的商品怎么缴纳增值税
  • 转款账户错误退款的账务处理
  • 堤围内的土地性质
  • 企业所得税退税的会计分录怎么做
  • 制造业贷款用途
  • 关于增值税报税的通知
  • 资产类账户的期末余额计算公式
  • 主办会计和会计助理的区别
  • 购销合同印花税2023年新规定
  • 企业或公司的证明怎么弄
  • 医用酒精出口 需要什么条件
  • 取得海运费发票怎么入账
  • 以前年度的库存商品出现负数今年如何入账
  • 单位应当为职工创造有益于健康的环境和条件
  • 消耗性生物资产
  • 如何查看电脑的型号和配置
  • 如何申请税务发票
  • 营业外支出所得税前可以扣除吗
  • 房产税的征收范围为
  • 电脑不能上网是什么原因?
  • 电脑找不到ie浏览器
  • 修改组策略后需要重启吗
  • inclooder.exe
  • koeids.dll
  • 超级本轻薄本
  • 处置子公司的方式
  • PHP实现中国公民身份证号码有效性验证示例代码
  • 同城票据清算和清算资金往来的区别
  • 一站式自动化测试平台如何滑动
  • 发现新大陆的是麦哲伦还是哥伦布
  • 37.JavaScript对象与JSON格式的转换,JSON.stringify、JSON.parse方法的使用方法和注意事项
  • php array_fill
  • 固定资产处置缴纳增值税政策依据
  • 外购存货的成本包括哪些内容
  • 教育费附加减免政策
  • 公司股票买卖账务处理
  • 一般纳税人进项大于销项账务处理
  • 织梦内容页模板修改
  • 启动mysql的语句
  • mysql基础操作命令
  • 资金收益率的计算
  • 装修款收不回怎么办
  • 增值税留抵税额借贷方向
  • 企业所得税免税和减半征收
  • 年度所得税费用
  • 新契税法商业
  • 其他税后扣减
  • 坏账收不回来如何做分录
  • 企业注销递延所得税资产怎么处理
  • 核定征收小规模做汇算清缴吗
  • 核定征收需要带什么资料
  • sql 常用语录
  • 轻松跨越英语关在线阅读
  • win10预览版21h2
  • windows10预览版怎么样
  • 怎样修改mac
  • itunes清理iphone垃圾
  • win7的打开方式在哪里
  • win10无法启动diagnostic policy service
  • computed缓存
  • 用python操作excel
  • python入门后学什么
  • nodejs处理excel
  • jquery 刷新div
  • 怎样设置安卓等比例显示按钮
  • js中弹出对话框
  • js闭包实现
  • jquery 扩展事件
  • jquery根据name
  • linux中安装python的工具包
  • 陕西省国家税务总局班子成员
  • 12366纳税服务热线工作时间
  • 江苏省高中教师资格证考试科目
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设