位置: 编程技术 - 正文

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

  • 所得税交错了怎么处理
  • 软件产品即征即退备案资料
  • 汇算清缴补交所得税会计分录小企业会计政策
  • 整形医院有收费标准么
  • 在计算缴纳房产税时,不计入房产原值的是
  • 私对公转错了多久退回来
  • 新企业会计准则的内容
  • 出纳现金日记账表格模板
  • 中国公司投资海外有什么限制
  • 金税盘领用发票查询不到
  • 营改增后劳务派遣公司账务处理
  • 为什么非征期不允许汇总上传
  • 印花税按主营业务成本计算吗
  • 抵免税款收益算其他收益吗
  • 合并报表盈余公积跟母公司有什么关系
  • 土地转让怎么缴纳增值税
  • 租入办公设备的租金计入什么科目
  • 安置房视同销售需要缴纳所得税吗?
  • 增值税完税凭证怎么做账
  • 未抵扣完的进项税额可以跨年抵扣吗
  • 补交以前年度增值税的科目处理
  • linux help
  • PHP+jQuery翻板抽奖功能实现
  • 鸿蒙系统怎么去掉负一屏
  • 视同销售要做收入?
  • 股票发行费用怎么处理
  • 怎样改善现金流量比率
  • 增值税专用发票怎么开
  • 跨国并购融资问题
  • 年终奖发放管理制度
  • 莱奇沃思田园城市
  • 项目优化管理工具
  • php phyon
  • CodeIgniter视图使用注意事项
  • 东洛锡安的金黄麦田,苏格兰 (© Scott Masterton/plainpicture)
  • 微信小程序实现灯泡开关效果
  • 未交增值税的核算方法
  • 后端中spef文件和spf文件
  • laravel enum
  • wordpress限制邮箱注册
  • 其他综合收益在报表中的位置
  • mongodb导入数据三种方式
  • 软件和硬件如何分开
  • 付款给个人
  • 企业年金是否要交个税
  • 应收账款属于供应商还是客户
  • 房产税从租和从价哪个税金高
  • 工会筹备金有优惠政策吗
  • 增值税报表附表三
  • 企业固定资产贷款二押的风险
  • mysql数据类型和java对应
  • 印花税的征税对象和计税依据
  • 债务资本的税后成本和税后债务成本
  • 企业取得的跨期业务
  • 企业给予第三方补贴
  • 单位社保缴费收费标准
  • 资产处置损益的明细科目
  • 销项税和进项税的借贷方向
  • 出口免税的税种包括
  • 投资性房地产的范围
  • 应付职工薪酬核算的有
  • 不含税价格怎么算公式(1+3%)
  • windows怎么显示隐藏文件
  • 卸载微信后重新登录微信怎么恢复之前的数据
  • win8的系统
  • xp系统换成win10
  • logrotate syslog
  • CentOS(x86_64)下PHP安装memcache扩展问题解决方法分享
  • 装win7系统步骤
  • xp系统如何安装软件
  • windows的视频
  • windows10累积更新很慢
  • unity物体移动速度怎么设置
  • js经典实例
  • python闭包的条件
  • python正则批量替换字符串
  • js用于
  • 入职培训结束就签合同吗
  • 补发上个月的工资怎么做账
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设