从类中设置一个数组,让他在课外

时间:2015-08-19 15:31:58

标签: php arrays wordpress

我会在函数内创建一个带有ID帖子的数组,并让他在课外。 我的代码:



<?php 
class cat_widget extends WP_Widget {
private $newHomePost = array(); 	
	
	function widget($args, $instance){	
      //...

      foreach($img_ids as $img_id) { 
		if (is_numeric($img_id)) {
			$this->setNewHomePost($newsCounter,$post->ID);
			$newsCounter++;
            
            //...
        }
      }
    }
	function setNewHomePost($num, $value){ 
		$newHomePost[$num] = $value;
	}
	function getNewHomePost(){ 
        return "ID: ".$this->newHomePost[0];
    }
}

$testA = new cat_widget();
echo $testA->getNewHomePost();
?>
&#13;
&#13;
&#13;

我在屏幕上收到了这样的结果: ID: (没有id)

但是如果我在setNewHomePost()里面插入一个数组的回声,我会正确地获得数组,但是在内部而不是在类之外。

&#13;
&#13;
    	function setNewHomePost($num, $value){ 
    		$newHomePost[$num] = $valore;
    		echo $newHomePost[0];
    	}
&#13;
&#13;
&#13; 所以看起来这个数组在&#34;功能小部件&#34;中工作正常,但不能在它之外工作。 有人可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

function setNewHomePost($num, $value){ 
    $newHomePost[$num] = $value;
}

这会创建一个名为$newHomePost的{​​{3}}变量,在索引处设置一个值并返回。一旦它返回,局部变量就会消失。从链接的手册页:

  

函数内使用的任何变量默认都限制在本地函数范围内。

您想要设置班级成员local newHomePost

function setNewHomePost($num, $value) { 
    $this->newHomePost[$num] = $value;
}

<强>更新

这是您目前定义get方法的方式:

function getNewHomePost() {
    return "ID: " . $this->newHomePost[0];
}

我怀疑你还在摆弄这个并尝试让它发挥作用。如果你真的只想返回第0个索引,那么试试这样的事情:

function getNewHomePost() {
    return isset($this->newHomePost[0]) ? $this->newHomePost[0] : null;
}

构建类时,请记住,您无法对可以从另一个对象或调用代码调用公共方法的顺序做出任何假设(即使调用代码本身存在于类中。方法是公共的,意味着任何东西都可以给他们打电话)。上面的代码没有任何内容,因为您不必在addNewHomePost之前调用getNewHomePost。我想如果你查看日志,可能会看到一些Notice: Undefined index..类型错误。

另外一定要检查主叫方:

$myClass = new cat_widget;
$myClass->setNewHomePost(0, 'my new home post!');

$homePost = $myClass->getNewHomePost();
echo $homePost ? $homePost : 'None';

我认为更好的getter方法可能看起来像这样:

function getNewHomePost($i) {
    return isset($this->newHomePost[$i]) ? $this->newHomePost[$i] : null;
}