繁体   English   中英

运行不带参数但需要函数外部变量的函数-PHP

[英]Run a function without a parameter but needed a variable outside of the function - PHP

我有这个类叫做Campaign ,我想echo $campaign->getName()不使用任何类似的参数echo $campaign->getName($user_id, $campaign_id)

<?php 

$campaign = new Campaign($db);

class Campaign {

    private $db;

    public function __construct($db) {
        $this->db = $db;
    }

    public function getName() {

        $query = $this->db->prepare("SELECT name FROM campaign WHERE campaign_id = :campaign_id AND user_id = :user_id");
        $status = $query->execute(array(':campaign_id' => $campaign_id, ':user_id' => $user_id));
        return ($query->rowCount() == 1) ? $query->fetchObject()->name : false;
    }
}

我得到的是

Missing argument 1 for Campaign::getName()
Missing argument 2 for Campaign::getName()

从逻辑上讲,这应该发生。

我要呼叫的是在会话中检索到的$user_id and $campaign_id

这是我的init.php的结构,其中存储了所有类/函数。

在此处输入图片说明

是否可以在不带参数的情况下调用函数,但是该函数需要在函数之外的变量?

您不能访问该变量,因为它只是未在函数内部本地定义。
如果要在定义外部时使用var内部,请在var之前使用global

$foo = 'bar';
function baz() {
    global $foo;
    // now u can use it inside.
}

php变量范围

我个人不喜欢全局变量,您也可以执行以下操作:

function foo($arg1 = null, $arg2 = null) {
    // if they are not set retrieve from a session
    $arg1 = ($arg1 !== null) ? $arg1 : $_SESSION['arg1'];
   // rinse repeat.
}

您尚未从会话中调用$ user_id和$ campaign_id

应具有$ user_id和$ campaign_id作为全局变量:

global $user_id;
global $campaign_id;
$user_id = $_SESSION['user_id'];
$campaign_id = $_SESSION['campaign_id'];

在屏幕快照的session_start()之后放置上面的变量声明

尝试这个:

<?php 

session_start();

$campaign = new Campaign($db);

class Campaign {

    private $db;

    public function __construct($db) {
        $this->db = $db;
    }

    public function getName() {

        $query = $this->db->prepare("SELECT name FROM campaign WHERE campaign_id = :campaign_id AND user_id = :user_id");
        $status = $query->execute(array(':campaign_id' => $_SESSION['campaign_id'], ':user_id' => $_SESSION['user_id']));
        return ($query->rowCount() == 1) ? $query->fetchObject()->name : false;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM