在PHP类中的函数之间共享变量

时间:2015-12-18 15:32:03

标签: php class properties

这可能是一个重复的问题,但是......我在这里阅读了几个答案以及关于类属性(变量)以及如何声明它们的php.net上的信息,但是我无法成功应用这些知识。更确切地说,我无法在此类中将函数从函数传递给另一个函数。我的课程是为Wordpress构建的,示意图如下所示。所有函数的运行顺序与它们在类中的顺序相同。在getForm()函数中,收到带有帖子ID的变量$_POST['postid'],并获取具有此ID的帖子。我需要的是将帖子ID传递给handleForm()函数,但我失败了。每次我尝试的东西,我收到一条消息,我的变量没有被声明。如何在这堂课中正确地做到这一点?

class WPSE_Submit_From_Front {

    function __construct() {
        ...
        add_action( 'template_redirect',  array( $this, 'handleForm' ) );
    }

    function post_shortcode() {
        ...
    }

    function getForm() {

        if( 'POST' == $_SERVER['REQUEST_METHOD'] && isset( $_POST['postid'] ) ) {
            $post_to_edit = array();
            $post_to_edit = get_post( $_POST['postid'] );
            // I want to use the $post_to_edit->ID or
            // the $_POST['postid'] in the handleForm() function
            // these two variables have the same post ID
        }

        ob_start();
        ?>

        <form method="post">
            ...
        </form>

        <?php
        return ob_get_clean();
    }

    function handleForm() {
        ...
    }

}

new WPSE_Submit_From_Front;

2 个答案:

答案 0 :(得分:3)

好的,所以在课堂上你可以声明私有变量:

private $post_id;

然后在constructor内进行操作:

$this->post_id = $_POST['postid'];

现在,在任何一个类方法中,$ post_id都可以$this->post_id

访问

在你的情况下,它看起来像这样:

class WPSE_Submit_From_Front {

    private $post_id;

    function __construct() {
        $this->post_id = $_POST['postid'];
    }

    function post_shortcode() {
        $somevar = $this->post_id;        
    }

    function getForm() {

        if( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $this->post_id ) ) {
            $post_to_edit = array();
            $post_to_edit = get_post( $this->post_id );
            // ...
        }

        // ...
    }

    function handleForm() {
        do_something_new($this->post_id);
    }

}

答案 1 :(得分:-1)

您可以添加所需的任何类属性:

require()