2015-08-19 155 views
0

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

我接收在屏幕上此resuld: ID: (没有ID)

但是,如果我插入内部setNewHomePost()用于阵列的回波,我会正确地获得数组,但不在课堂之外。

 \t function setNewHomePost($num, $value){ 
 
    \t \t $newHomePost[$num] = $valore; 
 
    \t \t echo $newHomePost[0]; 
 
    \t }
所以似乎是阵列的工作“功能部件”内部罚款,但不工作外面。 有人可以帮我吗?

+0

如果用断章取义的WordPress此代码不能正常工作 – gpupo

回答

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

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

在函数内部使用的任何变量缺省局限于本地函数作用域。

你要设置的类成员propertynewHomePost代替:

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

更新

这是你目前如何定义了get方法:

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

我怀疑你还在摆弄着t他并试图让它工作。如果你真的想仅仅只有再回到第0指数,尝试这样的东西,而不是:

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

当建立一个类记住,你不能做什么命令你的公共方法可以从另一个调用任何假设对象或调用代码(即使调用代码本身存在于类内部,方法是公共的,这意味着任何东西都可以调用它们)。上面的代码没有任何规定,因为您不必在getNewHomePost之前拨打addNewHomePost。我想如果你看看你的日志,你可能会看到几个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; 
} 
+0

谢谢。现在,我怎么能从课外使用这个变量? '$ test = new className(); echo $ test-> getNewHomePost();' 以外的类不起作用。 – angelo

+0

感谢@watcher的回答。我尝试了你的建议,但是如果我在'function widget'外面插入'getNewHomePost()',这不起作用并且只接收没有ID号的'ID:'(例如ID:567)。 如果我在'function widget'里面插入'getNewHomePost()',这个工作正常,并且打印带有ID号(ID为567)的'ID:'。 所以我会'getNewHomePost()'也可以在'function widget'之外使用。有什么建议吗? – angelo