php 中的静态,为什么它对两个类都使用一个缓存

康纳霍尔特

我为我的模型创建父类,它看起来像这样

class Model {

   protected static $cache = [];

   public static function load($id)
   {
       return static::$cache[$id];
   }

   public static function findById($id)
   {
       $model = static::find($id);

       static::$cache[$id] = model;

       return model;
   }

   ...
}

我有两个孩子班,例子

class A extend Model {}
class B extend Model {}

然后,我写

A::findById(1);
B::findById(1);

$a = A::load(1);
$b = B::load(1);

我认为类 $b 的类型是 B 类,但不是,它是 A 类,因为函数“加载”使用静态缓存并从函数 A::findById(1) 加载结果。为什么?

轴心

通过访问静态类属性,static::$cache告诉解释器使用$cache用于调用方法的类属性,而不是定义方法的类的属性。

用简单的英语,当你打电话A::findById(),你想到的是findById()使用该属性$cacheA,而不是一个Model同为A::load()和类似的B::findById()B::load()

现在的问题是:AB类是否$cache自己声明了静态属性因为如果他们不声明这个属性,函数static::中的前面就找不到并使用了对于.$cacheA::findById()A::$cacheModel::$cacheB::findById()

解决您的问题的简单方法是protected static $cache在所有扩展Model.

正确的解决方案是不使用静态属性和方法。静态属性和方法不是 OOP。它们是伪装成 OOP 代码的过程编程(和思维)。难以理解和测试的代码。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

PHP:在一个查询中的两个表

来自分类Dev

在一个PHP中合并两个正则表达式

来自分类Dev

一个变量的两个动作PHP

来自分类Dev

在一个html文件中包含两个PHP文件不起作用

来自分类Dev

如何在PHP中使用一个mysqli查询更新两个选择框

来自分类Dev

为什么PHP在一个文件中混合两个fopen句柄?

来自分类Dev

如何检查是否在php中两个日期之间有一个周末?

来自分类Dev

为什么一个php标记内的两个查询不起作用

来自分类Dev

将两个表中的数据存储到一个php数组中

来自分类Dev

为什么PHP有两个密码哈希函数?

来自分类Dev

PHP:在一个查询中的两个表

来自分类Dev

在php中的另一个类中调用静态属性

来自分类Dev

使用php和mysql将两个表合并到一个新表中

来自分类Dev

PHP的同一类对象分为另一个类的两个功能

来自分类Dev

在具有两个外键(php)的一个表中插入数据

来自分类Dev

加入两个mysql表并在php中填充一个数组

来自分类Dev

如何使用php在一个mysql查询中运行两个循环

来自分类Dev

我可以在一个常用函数中编写两个php函数吗

来自分类Dev

一个php文件中的两个事件功能

来自分类Dev

如何从PHP中的两个常规数组创建一个数组

来自分类Dev

为什么一个php标记内的两个查询不起作用

来自分类Dev

在PHP中基于两个表ID创建一个数组

来自分类Dev

获得一个while循环,以在PHP中使用两个条件运行“ X”次

来自分类Dev

如何在PHP代码中将两个表中的两个查询合并为一个查询?

来自分类Dev

代码中意外的'=',试图在一个php文件中执行两个SQL查询

来自分类Dev

如何在PHP的一个函数中同时使用两个变量

来自分类Dev

如何在php中为一个变量分配两个值

来自分类Dev

检查php中两个或多个数组中是否存在一个值

来自分类Dev

将两个 MySQL 行放入一个 PHP 数组中

Related 相关文章

  1. 1

    PHP:在一个查询中的两个表

  2. 2

    在一个PHP中合并两个正则表达式

  3. 3

    一个变量的两个动作PHP

  4. 4

    在一个html文件中包含两个PHP文件不起作用

  5. 5

    如何在PHP中使用一个mysqli查询更新两个选择框

  6. 6

    为什么PHP在一个文件中混合两个fopen句柄?

  7. 7

    如何检查是否在php中两个日期之间有一个周末?

  8. 8

    为什么一个php标记内的两个查询不起作用

  9. 9

    将两个表中的数据存储到一个php数组中

  10. 10

    为什么PHP有两个密码哈希函数?

  11. 11

    PHP:在一个查询中的两个表

  12. 12

    在php中的另一个类中调用静态属性

  13. 13

    使用php和mysql将两个表合并到一个新表中

  14. 14

    PHP的同一类对象分为另一个类的两个功能

  15. 15

    在具有两个外键(php)的一个表中插入数据

  16. 16

    加入两个mysql表并在php中填充一个数组

  17. 17

    如何使用php在一个mysql查询中运行两个循环

  18. 18

    我可以在一个常用函数中编写两个php函数吗

  19. 19

    一个php文件中的两个事件功能

  20. 20

    如何从PHP中的两个常规数组创建一个数组

  21. 21

    为什么一个php标记内的两个查询不起作用

  22. 22

    在PHP中基于两个表ID创建一个数组

  23. 23

    获得一个while循环,以在PHP中使用两个条件运行“ X”次

  24. 24

    如何在PHP代码中将两个表中的两个查询合并为一个查询?

  25. 25

    代码中意外的'=',试图在一个php文件中执行两个SQL查询

  26. 26

    如何在PHP的一个函数中同时使用两个变量

  27. 27

    如何在php中为一个变量分配两个值

  28. 28

    检查php中两个或多个数组中是否存在一个值

  29. 29

    将两个 MySQL 行放入一个 PHP 数组中

热门标签

归档