这可能是一个重复的问题,但是......我在这里阅读了几个答案以及关于类属性(变量)以及如何声明它们的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;
答案 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()