如何引用另一个文件中的类中的函数,该文件也是命名空间的?

时间:2019-07-03 作者:Abe Caymo

例如,我在文件1中。具有命名空间类的php,如下所示:

<?php
namespace FrameWork\\CPT;
class CPT{
      .....
public function register_custom_post_type()
{
$args = array(
\'register_meta_box_cb\' => //PROBLEM: How to reference from a different file 
                            which also contains a namespaced class
register_post_type(\'plugin-cpt\', $args);
}
如何从file2的命名空间类访问公共函数。php?

<?php
namespace FrameWork\\Helper;
class Metabox{
           .....
public function register_metaboxes()
{
 // I want to reference this function
}

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

首先,要做到这一点register_metaboxes() 方法需要是静态的:

public static function register_metaboxes()
{

}
然后,为回调传递一个具有完整类名(包括命名空间)的数组:

$args = array(
    \'register_meta_box_cb\' => [ \'FrameWork\\Helper\\Metabox\', \'register_metaboxes\' ],
);
如果出于任何原因,register_metaboxes() 不是静态的(即,您正在使用$this) 那么仅仅传递类名是不够的,您需要传递一个类的实例:

namespace FrameWork\\CPT;

class CPT {
    public function register_custom_post_type()
    {
        $meta_box_helper = new FrameWork\\Helper\\Metabox();

        $args = [
            \'register_meta_box_cb\' => [ $meta_box_helper, \'register_metaboxes\' ],
        ];

        register_post_type( \'plugin-cpt\', $args );
    }
}

相关推荐

Namespaced shortcode?

我正在改造一个旧的WP站点,该站点有许多自定义的短代码,显然由于代码当前的组织方式,这些短代码在性能方面付出了代价。当然,我可以修复优化不好的代码,使用十几个短代码,并且一天就可以完成,但我想知道如何更好地组织它们。根据WordPress\'documentation, 建议将它们放在插件中并在上初始化init. 我们可以通过这样“命名”它们来减少这个钩子中的负载吗?[com.company shortcode attr=\"attr\" prop=\"prop\"] 有人尝试过这样的解决方案吗