【问题标题】:add_action in wordpress using OOP?使用 OOP 在 wordpress 中添加操作?
【发布时间】:2013-09-19 08:14:05
【问题描述】:

我正在学习 OOP,我想我已经掌握了窍门。我的问题是为什么 wordpress 样板插件的作者写了这样的添加操作函数

add_action('admin_init', array(&$this, 'admin_init'));

根据我理解add_action钩子的代码,要传递的参数是$tag“$function_to_add 被钩住的操作的名称”,以及你想要钩住的函数$function_to_add

好吧,我理解 OOP 中的函数是方法,我明白为什么这可能会改变语法,但这只是一个模糊的表示,我想要一个明确的答案,为什么作者使用数组,然后使用 &$this。我明白为什么有人会使用$this->property,但不太确定&$this

只是您如何引用该方法吗?如果是这样,我仍然不了解数组,为什么它看起来不像 $this->admin_init

顺便说一下,结构看起来有点像这样

    class my_plugin_settings {

            public function __construct() {

                    // register actions
                    add_action('admin_init', array(&$this, 'admin_init'));

            } 

            public function admin_init() {

                    //Settings here
            }
    }

【问题讨论】:

    标签: php


    【解决方案1】:

    &this 为 PHP 函数提供上下文,将其连接到 admin_init 函数。查看 add_action 的声明或查看http://www.php.net/manual/en/function.call-user-func-array.php

    这就是 PHP 知道在该对象中使用函数的方式,而不是全局级函数

    【讨论】:

    • 好的,感谢您的解释和链接。我在谷歌上搜索了这个并没有得到任何好的结果,因为 & 符号。好的(菜鸟问题)使&$this成为键和函数admin_init成为值?我不确定为什么要使用数组,而不仅仅是说$this->funcName。继续阅读,希望能理解为什么,但如果你知道,如果你能简要解释一下,那就太好了:)
    • 您正在传递一个数组,但它符合callable 类型。这就是可调用对象的结构方式。如果传递了一个数组,它假定键是要调用的对象,值是函数。如果只传递一个字符串,PHP 假定它是一个全局级别的函数并调用它。 php.net/manual/en/language.types.callable.php
    • 啊,好吧,这更有意义。有没有其他方法可以编写相同的语法?看起来Foo::test 是一种引用对象/方法的方式?这种语法是新的,因为我假设它只在 OOP 中使用,但我经常看到它,现在我正在使用 OOP。
    • 没有(据我所知),因为这是callable 的语法。不要忘记 - 你没有传递函数。您正在传递对对象的引用和函数的名称。 PHP 使用自省来确定实际调用哪个函数。较新版本的 PHP 具有一流的功能,因此将来可能会这样做,但目前这是这样做的方法。
    • 好吧,这对我来说确实缩小了范围,我刚刚在 php 手册中看到了一个参考,它需要一些滚动,它还涵盖了扩展类,这可能很快就会派上用场。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 2021-12-15
    • 2015-01-21
    • 1970-01-01
    相关资源
    最近更新 更多