我想在实例化一个类时能够传递一个名称,该名称将用于为该类中的方法名称添加前缀,到目前为止我有这个
<?php
if ( ! class_exists( 'My_Class' ) ) {
/**
* Creates filter method
*
* @since 1.0.0
*/
class My_Class {
/**
* Prefix for method names
*
* @var string $name Name of the filter prefix.
*/
private $name;
/**
* Version.
*
* @var string
*/
private $version = '1.0.0';
/**
* Initialize the class and set its properties.
*
* @since 1.0.0
* @param string $name The name for the method prefix.
* @param string $version The version of this plugin.
*/
public function __construct( $name, $version ) {
$this->name = $name;
$this->version = $version;
add_filter( 'my_filter_name', $name . '_my_folder' );
}
/**
* Function for filtering folder array
*
* Each plugin has to set its own array of paths and url.
*
* @param array $import_array Array with folder values.
* @return array Modified array with folder values.
*/
public function $name . _my_folder() {
$import_array[$this->name]['folder'] = plugin_dir_path( __FILE__ ) . 'includes/layout';
$import_array[$this->name]['folder_url'] = plugin_dir_url( __FILE__ ) . 'includes/layout';
return $import_array;
}
}
}
我的想法就是把它称为
$first_object = new My_Class( 'first' );
$second_object = new My_Class( 'second' );
这样我就可以在多个相同的插件中使用它,具有不同的名称,具体取决于插件的类型。
明显的问题是function $name . _my_folder()
。
我读了一些关于__call()
魔术方法的内容,但我不确定在这种情况下是否可以使用它,或者如何应用它。
可以这样做吗?
答案 0 :(得分:1)
为什么不制作方法的名称参数?
像这样:
add_filter('my_filter_name', [$this, 'methodName'], 10, 1);
第三个参数是过滤器的优先级,第四个参数是接受的参数号。
public function methodName($name) {}
并将其称为:
apply_filters('my_filter_name', $value, $arg);
答案 1 :(得分:-1)
我不是专家,但我认为您必须在构造函数中指定默认版本...我不确定,但您可以尝试。
public function __construct( $name, $version="1.0.0" ) {
$this->name = $name;
$this->version = $version;
add_filter( 'my_filter_name', $name . '_my_folder' );
}