2015-12-18 214 views
2

這可能是一個重複的問題,但是...我讀到這裏的幾個答案,並在約類的屬性(變量)和如何申報他們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; 

回答

-1

您可以添加任何你需要的是一個類屬性:

Class WPSE_Submit_From_Front { 
    public $post_id; 
    public function set_post_id() 
    { 
      $this->post_id = $POST['id']; 
    } 
} 
+1

_class_是大寫的。 $ POST不是一個有效的PHP數組($ _POST是),如果沒有設置$ POST ['id'],該怎麼辦? – pavlovich

+0

恭喜,你指出了一些錯別字,讓我編輯現在 – Kisaragi

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); 
    } 

} 
+0

我在每個班級的功能被檢查與'回聲「帖子的ID」。 $這個 - > post_to_edit_id;'如果'$這個 - > post_id'有帖子ID作爲一種價值,一切都OK,除了'handleForm()'函數,這裏的'這個 - $> post_id'沒有返回值(或沒有按不存在,我不知道)。如果你願意,你可以看到下一個鏈接的原始代碼。在那裏我用兩個隱藏的輸入字段解決了我的問題,但我不喜歡這樣。 http://wordpress.stackexchange.com/a/212165/25187 – Iurie

+0

我檢查了這個類中的每一行代碼,但我不明白爲什麼'$ this-> post_id'屬性是乾淨的(沒有任何值)在'handleForm()'函數中。 'ADD_ACTION( 'template_redirect',陣列($此, 'handleForm'));':也許是因爲這個功能是通過這個執行? – Iurie