我有以下功能。WordPress功能,但这实际上是一个PHP问题。它们$term根据artist_lastname每个对象的元数据中的属性对我的对象进行排序。
$term
artist_lastname
我想$meta在第一个函数中传递一个字符串。这将使我可以重复使用此代码,因为我可以将其应用于各种元数据属性。
$meta
但是我不明白如何将 额外的 参数传递给usort回调。我试图制作一个JS风格的匿名函数,但是服务器上的PHP版本太旧,并引发了语法错误。
非常感谢您提供的任何帮助-或将手册推向手册的右上角。谢谢!
function sort_by_term_meta($terms, $meta) { usort($terms,"term_meta_cmp"); } function term_meta_cmp( $a, $b ) { $name_a = get_term_meta($a->term_id, 'artist_lastname', true); $name_b = get_term_meta($b->term_id, 'artist_lastname', true); return strcmp($name_a, $name_b); }
在PHP中,回调的一种选择是传递一个包含对象句柄和方法名称的,由两个元素组成的数组,以对该对象进行调用。例如,如果$obj是class的实例MyCallable,并且您要调用on 的method1方法,则可以将其作为回调传递。MyCallable``$obj``array($obj, "method1")
$obj
MyCallable
method1
MyCallable``$obj``array($obj, "method1")
使用此受支持的回调类型的一种解决方案是定义一个单用类,该类本质上类似于闭包类型:
function sort_by_term_meta( $terms, $meta ) { usort($terms, array(new TermMetaCmpClosure($meta), "call")); } function term_meta_cmp( $a, $b, $meta ) { $name_a = get_term_meta($a->term_id, $meta, true); $name_b = get_term_meta($b->term_id, $meta, true); return strcmp($name_a, $name_b); } class TermMetaCmpClosure { private $meta; function __construct( $meta ) { $this->meta = $meta; } function call( $a, $b ) { return term_meta_cmp($a, $b, $this->meta); } }