繁体   English   中英

带有 PSR4 自动加载器的另一个类的 PHP OOP 选择方法

[英]PHP OOP select method from another class with a PSR4 Autoloader

我正在尝试在 bootstrap 的 walker 类中选择一个名为 fallback 的方法。 类名称为 WPNavwalker。

我已经尝试了很多东西,但没有奏效。 像\\Namespace\\classes\\Classname::fallback, Namespace\\classes\\Classname::fallback

看我的代码:

use Namespace\classes\WPNavwalker;
public static function show_menu() 
{
    wp_nav_menu( array(
        'theme_location'  => 'primary',
        'depth'           => 2, // 1 = no dropdowns, 2 = with dropdowns.
        'container'       => 'div',
        'container_class' => 'collapse navbar-collapse',
        'container_id'    => 'bs-example-navbar-collapse-1',
        'menu_class'      => 'navbar-nav ml-auto',
        'fallback_cb'     => 'Classname::fallback',
        'walker'          => new \Namespace\classes\WPNavwalker()   
    ));
}

我只需要知道如何选择该方法

这是错误:未捕获的错误:未定义的类常量“后备”。

public static function fallback( $args ) {
            if ( current_user_can( 'edit_theme_options' ) ) {

                /* Get Arguments. */
                $container       = $args['container'];
                $container_id    = $args['container_id'];
                $container_class = $args['container_class'];
                $menu_class      = $args['menu_class'];
                $menu_id         = $args['menu_id'];

                // initialize var to store fallback html.
                $fallback_output = '';

                if ( $container ) {
                    $fallback_output .= '<' . esc_attr( $container );
                    if ( $container_id ) {
                        $fallback_output .= ' id="' . esc_attr( $container_id ) . '"';
                    }
                    if ( $container_class ) {
                        $fallback_output .= ' class="' . esc_attr( $container_class ) . '"';
                    }
                    $fallback_output .= '>';
                }
                $fallback_output .= '<ul';
                if ( $menu_id ) {
                    $fallback_output .= ' id="' . esc_attr( $menu_id ) . '"'; }
                if ( $menu_class ) {
                    $fallback_output .= ' class="' . esc_attr( $menu_class ) . '"'; }
                $fallback_output .= '>';
                $fallback_output .= '<li><a href="' . esc_url( admin_url( 'nav-menus.php' ) ) . '" title="' . esc_attr__( 'Add a menu', 'wp-bootstrap-navwalker' ) . '">' . esc_html__( 'Add a menu', 'wp-bootstrap-navwalker' ) . '</a></li>';
                $fallback_output .= '</ul>';
                if ( $container ) {
                    $fallback_output .= '</' . esc_attr( $container ) . '>';
                }

                // if $args has 'echo' key and it's true echo, otherwise return.
                if ( array_key_exists( 'echo', $args ) && $args['echo'] ) {
                    echo $fallback_output; // WPCS: XSS OK.
                } else {
                    return $fallback_output;
                }
            }
        }

文档链接: https : //github.com/wp-bootstrap/wp-bootstrap-navwalker

这有效并模仿您的代码:

<?php
// this is the class defining a callback
class MyClass
{
    public static function ThisIsCallback($args)
    {
        var_dump([
            'I am your callback',
            $args
        ]);
    }
}

// this is a class /w method calling the callback
class AnotherClass
{
    public function whatever($params, $callback)
    {
        var_dump([
            'I am whatever'
        ]);
        $callback($params);
    }
}

// this is the actual call
(new AnotherClass)->whatever([1,2,'I am your param'],[MyClass, ThisIsCallback]);

输出:

array(1) {
  [0]=>
  string(13) "I am whatever"
}
array(2) {
  [0]=>
  string(18) "I am your callback"
  [1]=>
  array(3) {
    [0]=>
    int(1)
    [1]=>
    int(2)
    [2]=>
    string(15) "I am your param"
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM