У меня есть этот класс под названием 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
где init.php
все классы / функции.
Можно ли вызвать функцию без параметра, но для этой функции нужна переменная вне функции?
Вы не можете получить доступ к этой переменной, поскольку она не определена локально внутри функции.
Если вы хотите использовать var внутри, когда он определен вне вас, используйте global
перед var.
$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; } }