在另一个函数内的函数中使用变量

时间:2014-06-10 15:09:19

标签: php function oop joomla scope

我有这两个功能:

public function desplubicarItem(){
    $item_id = JRequest::getCMD('id');
    $app = JFactory::getApplication();

    $db = JFactory::getDbo();
    $query = 'UPDATE #__k2_items SET published=0 WHERE id='.$item_id;
    $db->setQuery($query);
    $db->query();
}

public function getCuponesUtilizados(){
    $db = JFactory::getDbo();
    $query = 'SELECT count(item_id) as contador 
                FROM #__cuphoneo_subscripcion as cs 
                LEFT JOIN #__k2_items as k2i ON k2i.id = cs.item_id 
                WHERE cs.estado=0 AND k2i.id='..' GROUP BY cs.item_id';
    $db->setQuery($query);
    $resultado = $db->loadObject();

    return $resultado;
}

我想在第二个函数内的第一个函数中使用变量$item_id。我怎么能这样做?

5 个答案:

答案 0 :(得分:5)

声明一个类属性item_id并在你想要的每个方法中访问它:

private $item_id;

而不是$item_id使用$this->item_id

答案 1 :(得分:2)

示例,使用类属性:

public function desplubicarItem(){
    $this->item_id = JRequest::getCMD('id');
    $app = JFactory::getApplication();

    $db = JFactory::getDbo();
    $query = 'UPDATE #__k2_items SET published=0 WHERE id='.$this->item_id;
    $db->setQuery($query);
    $db->query();
}

public function getCuponesUtilizados(){
    //you can now access $this->item_id inside getCuponesUtilizados
    echo $this->item_id; 
    $db = JFactory::getDbo();
    $query = 'SELECT count(item_id) as contador 
                FROM #__cuphoneo_subscripcion as cs 
                LEFT JOIN #__k2_items as k2i ON k2i.id = cs.item_id 
                WHERE cs.estado=0 AND k2i.id='..' GROUP BY cs.item_id';
    $db->setQuery($query);
    $resultado = $db->loadObject();

    return $resultado;
}

答案 2 :(得分:0)

好像你在课堂上写作 您可以在类中创建属性并将数据放入其中,以便稍后在其他方法中使用它,如下所示:

...
public $item_id;
public function desplubicarItem(){
    $this->item_id = JRequest::getCMD('id');
...

请注意,现在您必须在方法中使用$this->item_id

或者你可以在第一个函数中调用第二个函数并传递变量(如果你可以调用一个方法并从两个函数中获得一个结果)。

public function desplubicarItem(){
    ...
    $this->getCuponesUtilizados($item_id);
}

public function getCuponesUtilizados(item_id){
    // now you can use $item_id here
}

答案 3 :(得分:0)

有多种方法可以实现这一目标。取决于函数的调用位置以及您想要做的事情。

您可以将$item_id作为第一个函数的返回值,例如

public function desplubicarItem(){
    $item_id = JRequest::getCMD('id');
    ...
    return $item_id
}

然后在第二个函数中为它添加一个参数:

public function getCuponesUtilizados($item_id){
}

然后你可以像这样打电话给他们:

$this->getCuponesUtilizados(desplubicarItem());

并使用您的第一个函数的返回值作为参数,将$item id权限放入第二个函数。

但这只是一种可能性,它实际上取决于您的代码/类设计,这是最适合您的方式。

答案 4 :(得分:0)

您可以将其设为属性,也可以将其作为参数或组合使用。

由于它是一个公共函数,您需要确保已设置参数的属性或值。例如,您可以将它作为必需参数添加到函数中,以便在调用时必须提供它,或者您可以将其添加为$item_id = null参数,然后,如果未设置,则从中获取值请求(正如您在第一个函数中所做的那样),但是有条件地。例如:

public function desplubicarItem($item_id = null)
{
   $this->item_id = $item_id != null ? : JRequest::getCMD('id');
...
}

您可以将其设置为您的类的构造函数,但是您必须在构造函数中处理相同的问题。但这实际上取决于全班同学在做什么。

这样做的一个原因是:如果您不想在请求中使用这些方法,例如,如果您从查询中获取了ID,该怎么办?我不会对你的方法加以限制,只是在没有直接提供值的情况下使其回落。否则你将真正限制你的灵活性。