【问题标题】:Run a function without a parameter but needed a variable outside of the function - PHP运行没有参数但需要函数外部变量的函数 - PHP
【发布时间】:2014-05-25 02:30:27
【问题描述】:

我有一个名为 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 的结构,其中存储了所有类/函数。

是否可以在没有参数的情况下调用函数,但该函数需要函数外部的变量?

【问题讨论】:

    标签: php


    【解决方案1】:

    你还没有从会话中调用 $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;
        }
    }
    

    【讨论】:

    • 我编辑了我的问题,嗯.. session_start();已应用于我的 init.php,其中存储了所有函数并在所有页面中回显。
    • 您需要将 user_id 和 campaign_id 作为全局变量。编辑了我的答案以显示如何!
    • 它被返回为空。
    • 这是因为在您将值分配给 $user_id 和 $campaign_id 之前调用了 require "functions/campaign.php"。您应该首先为变量赋值,然后调用 require 语句。我建议您将赋值代码移到变量的全局声明下方。那应该行得通。编辑了我的答案以显示如何
    【解决方案2】:

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

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

    Php variable scope

    我个人不喜欢全局变量,你也可以这样做:

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

    【讨论】:

    • 会试试这个,会给结果一个反馈。
    • 添加了指向 php 变量范围参考的链接。
    • 不可能创建函数 foo(arg1 = $_SESSION['user_id'], arg2 = $_SESSION['campaign_id']) ?我必须在我将要创建的每个函数上分配一个类似的变量吗?
    • 我不确定,试试看? :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    • 2012-10-22
    相关资源
    最近更新 更多