问题标签 [late-static-binding]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - 自我和静态之间是否存在中间立场?
我正在寻找 SELF 和 STATIC 之间的中间地带,没有后期静态绑定的意外行为。
以下是我的代码,带有练习结果和预期结果:
结果:
这是有道理的,在后期静态绑定中,保留的“静态”变量指的是最后一个类范围。我正在寻找的是一个保留变量,它指的是变量出现的顶级类。
IE:如果我用一个名为 Member 的类扩展 RecordObject 类,我需要一个可以在 RecordObject 中定义的函数,它将实例化一个新的 Member(或 Page,或 Comment),而不必在每个类定义中覆盖这个函数。这可能吗?
我遇到的问题是,比如说,我在 Member 中,我调用 Page::get($id),它在内部创建了一个新对象并做了一些魔术。不幸的是,如果我使用静态,那个新对象是一个成员......没有骰子。
php - 通过 PHP 中的静态属性进行缓存
我有许多扩展抽象 DatabaseRecord 类的类。本质上,DatabaseRecord 类处理所有子类在与数据库交互时使用的一些通用功能(例如,按 id 搜索、更新等)。
现在,我不想每次都经常去数据库获取记录,例如,在页面加载时引用了特定用户。我有一个相当巧妙的想法,因此我可以执行以下操作,因为 PHP 具有后期静态绑定。
不幸的是,所有子类共享相同的 static $cachedRecords
。
我可以通过static protected $cachedRecords;
在所有子类中重新声明并$cachedRecords
在 DatabaseRecord 中声明private
以阻止我忘记重新声明来解决此问题,但这似乎是一个不雅的解决方案。
有没有更好的方法可以做到一劳永逸?
php - 在 php 中调用另一个类中的静态属性
我有关于在另一个类中调用一个类的静态属性的问题。
我希望返回This is first property
但输出只是 __construct 中的参数输入名称;
当我print_r( static::$this->property );
的输出只是property_one
php - 在非静态函数上使用 self:: 或 static:: 好吗?
我在 php 中做一些 oop,而当我只是想知道这样做是否好?当我使用时$this->functionName()
,它工作正常,我什至尝试使用 self:: 和 static:: 并且它们按我预期的方式工作:
self:: 将使用父方法实现,如果被覆盖(后期静态绑定),静态将使用该方法的最后一个实现。但问题是它被用于非静态函数。这个好吗?它有什么缺点吗??为什么我不应该使用它?
php - 在对象级别设置缓存处理程序?
假设我有一个基础对象 CacheObject:
B 会给我“测试”,我相信这是因为 A 类没有它自己定义的属性 $handler...所以它使用继承的,由 B 类共享。这准确吗?
有什么方法可以让它们分开设置,而不需要在每个对象中声明 $handler ?
php - Accessing incorrect static property from within non static method in PHP
I am experiencing something in PHP that seems very odd. I am trying to access a static property from a non static method. I need to use the static keyword to access this property as it can have different values in each child class.
However, instead of accessing a property from the expected class at all, it instead accesses the property from the calling class. This seems like a bug to me, but if it isn't, I was wondering if someone could explain this behaviour to me and also explain how I can access this static property.
My expectation here is that the static property $why would be taken from class B. I am perplexed as to why instead it would be taken from Class A.
php - 后期静态绑定以取消设置扩展类中的非静态数组
对于这有点令人费解,我提前道歉。如果不是这样,我可能不会考虑这个问题。我正在使用一个允许扩展某些核心类但不允许扩展其他核心类的平台,但由于事件的顺序,我不确定是否可以在不删除整个父方法的情况下应用扩展类的更改(我想避免)。这是所涉及的类链的简化版本:
主视图类(可扩展):
辅助视图类(从上面的主类调用):
辅助视图类的数据获取器:
提取的简化数据,作为包含的数组:
我用伪代码扩展了主类(上面的第一个),它会完成什么:
我已经阅读了有关后期静态绑定的文档,但仍然不清楚它什么时候工作,什么时候不工作,在这种情况下,它是否可以从一个点静态绑定多个深度。如果这不是后期静态绑定的目的,是否有一些等效的方法可以从扩展MyViewData::display
方法静态调用数据获取器,以便当父级非静态调用它时,它已经具有修改后的数组和输出(或在这种情况下,不输出)修改的数组成员?
php - 如何在parent :: call中动态获取被调用类的类名?
我正在尝试get_called_class()
在父类上使用,并检索父类名称而不是子类名称。在这种情况下我不能使用它,因为我需要在动态上下文中使用它,因为这些方法实际上是使用and__CLASS__
插入到现有类中的。Closure::bind
__call
快速示例:
此示例打印TestSuper,TestSuper,
,但我想要get_called_class()
动态获取方法所在的类(打印TestSuper,Test,
)而不是被调用的类。它还必须在魔法__call
方法中起作用。这可能吗?
更新:更好的例子更接近地反映了我正在做的事情:我有一个方法列表,我想在运行时(在$addons
变量中)应用到实例(或类):
我正在向 中添加一个方法doSomething
,A
并在其上覆盖它B
,但我想在那里调用parent::doSomething()
将执行A
的doSomething
. 不幸的是,在执行父方法时,我无法找到一种方法来知道我想A
改用 run 的方法,所以它总是runB
并最终用完堆栈帧。我如何知道在内部__call
方法中执行超类方法?
php - 在 PHP 中创建两个相同的静态类
我正在尝试在 PHP 中扩展静态类。我遇到的是,一旦我更改了扩展类之一中的变量,所有其他类也会更改。这就是我想要做的:
我已经阅读了后期静态绑定和关键字 static::。但是我想不出一种方法来实现这一点,而不必在 Apple 和 Banana 中重新声明所有 Fruit 的方法。
我会很高兴得到任何帮助
谢谢你
php - 什么是 PHP 中的呼叫转移和静态呼叫或其他后期静态绑定?
我从网站上获得了一个代码示例,但我很难理解输出。我正在分享代码:
输出如下::
如果解释了上述输出,我将非常有帮助。提前致谢。