将过程PHP转换为OOP

时间:2016-10-25 00:55:12

标签: php wordpress oop woocommerce

我对OOP很新,但我认为我已经掌握了基础知识,而我正在努力学习。所以我决定将我的简单wordpress插件从程序代码转换为类方法,但我不断遇到致命的错误。

这是我的程序代码:

<?php
if ( ! defined( 'ABSPATH' ) ) { 
    exit; // Exit if accessed directly
}

//Check if WooCommerce is active
if ( is_plugin_active_for_network( 'woocommerce/woocommerce.php' ) ) {

//Load plugin styles
function woa_wqfsp_stylesheet() 
{
    wp_enqueue_style( 'wqfspCSS', plugin_dir_path( 'css/style.css', __FILE__ ) );
}
add_action('wp_enqueue_scripts', 'woa_wqfsp_stylesheet');

//add quantity fields
add_filter( 'woocommerce_loop_add_to_cart_link', 'woa_add_quantity_fields', 10, 2 );
function woa_add_quantity_fields( $html, $product ) {
    if ( $product && $product->is_type( 'simple' ) && $product->is_purchasable() && $product->is_in_stock() && ! $product->is_sold_individually() ) {
        $html = '<form action="' . esc_url( $product->add_to_cart_url() ) . '" class="cart" method="post" enctype="multipart/form-data">';
        $html .= woocommerce_quantity_input( array(), $product, false );
        $html .= '<button type="submit" class="button alt">' . esc_html( $product->add_to_cart_text() ) . '</button>';
        $html .= '</form>';
    }
    return $html;
}

}//main end
?>

这是我的OOP代码,但我一直收到错误:

<?php

if ( ! defined( 'ABSPATH' ) ) { 
    exit; // Exit if accessed directly
}

function woa_wqfsp() {
    return woa_wqfsp();
} // End woa_wqfsp()

woa_wqfsp();

class woa_wqfsp {

    private static $_instance = null;
    private $html;
    private $product;

    public function __construct() {

        add_action( 'init', array( $this, 'setup' ) );
    }

    public static function instance() {
        if ( is_null( self::$_instance ) )
            self::$_instance = new self();
        return self::$_instance;
    }

//Load plugin styles
function woa_wqfsp_stylesheet() 
{
    wp_enqueue_style( 'wqfspCSS', plugin_dir_path( 'css/style.css', __FILE__ ) );
}



function woa_add_quantity_fields( $html, $product ) {
    if ( $this->$product && $this->$product->is_type( 'simple' ) && $this->$product->is_purchasable() && $this->$product->is_in_stock() && ! $this->$product->is_sold_individually() ) {
        $html = '<form action="' . esc_url( $this->$product->add_to_cart_url() ) . '" class="cart" method="post" enctype="multipart/form-data">';
        $html .= woocommerce_quantity_input( array(), $this->$product, false );
        $html .= '<button type="submit" class="button alt">' . esc_html( $this->$product->add_to_cart_text() ) . '</button>';
        $html .= '</form>';
    }
    return $html;
}

function woa_wqfsp_run() {
//Check if WooCommerce is active
if ( is_plugin_active_for_network( 'woocommerce/woocommerce.php' ) ) {
//add style for quantity field
add_action('wp_enqueue_scripts', $this->woa_wqfsp_stylesheet);
//add quantity fields
add_filter( 'woocommerce_loop_add_to_cart_link', $this->woa_add_quantity_fields, 10, 2 );

}
}

}//class end
?>

有人可以指出我做错了什么吗?我认为这是围绕这一部分:函数woa_add_quantity_fields($ html,$ product)

$ html只是一个null var,而产品是woocommerce的全局变种

提前谢谢

1 个答案:

答案 0 :(得分:1)

<强>首先
关注一些naming conventions,使用大写字母开始类名。

<强>其次: 部分

function woa_wqfsp() {
    return woa_wqfsp();
} // End woa_wqfsp()

绝对没有意义,可能你应该返回类对象。

第三(您可能遇到错误): 这条线

add_action( 'init', array( $this, 'setup' ) ); 

setup()上调用init方法,这是您班级缺乏的方法。

因此,如果我们总结一下,你会得到这个:

function woa_wqfsp() {
    return new Woa_Wqfsp();
} // End woa_wqfsp()

woa_wqfsp();

class Woa_Wqfsp {

    private $html;
    private $product;

    public function __construct() {

        add_action( 'init', array( $this, 'setup' ) );
    }

    public function setup(){
        // do setup
    }

    //Load plugin styles
    function woa_wqfsp_stylesheet()
    {
        wp_enqueue_style( 'wqfspCSS', plugin_dir_path( 'css/style.css', __FILE__ ) );
    }

    function woa_add_quantity_fields( $html, $product ) {
        if ( $this->$product && $this->$product->is_type( 'simple' ) && $this->$product->is_purchasable() && $this->$product->is_in_stock() && ! $this->$product->is_sold_individually() ) {
            $html = '<form action="' . esc_url( $this->$product->add_to_cart_url() ) . '" class="cart" method="post" enctype="multipart/form-data">';
            $html .= woocommerce_quantity_input( array(), $this->$product, false );
            $html .= '<button type="submit" class="button alt">' . esc_html( $this->$product->add_to_cart_text() ) . '</button>';
            $html .= '</form>';
        }
        return $html;
    }

    function woa_wqfsp_run() {
        //Check if WooCommerce is active
            if ( is_plugin_active_for_network( 'woocommerce/woocommerce.php' ) ) {
            //add style for quantity field
            add_action('wp_enqueue_scripts', $this->woa_wqfsp_stylesheet);
            //add quantity fields
            add_filter( 'woocommerce_loop_add_to_cart_link', $this->woa_add_quantity_fields, 10, 2 );

        }
    }

}//class end

另外,考虑到你的问题,你仍然有空间来提高你的OOP技能。看看this SO回答中列出的资源。