class — переменная конструктора php, не доступная в функциях ниже

Я инициализировал новый экземпляр библиотеки в методе __construct () {} класса PHP и приравнял его к переменной,

но теперь я хочу использовать эту переменную для доступа к методам библиотеки внутри другой функции, но PHP не позволяет мне это делать.

class Demo
{

public function __construct()
{

parent::__construct(new PaymentModel);

$this->api = new Api(config("razorpay", "key_id"), config("razorpay", "key_secret"));

}

public function createOrder()
{
$order = $api->order->create();
echo '<pre>';
var_dump($order); die;

}
}

Я посмотрел на документацию __construct и некоторые другие ответы здесь о переполнении стека, но все, что они сделали, это сбило меня с толку больше, чем помогло мне.

Пожалуйста, помогите мне понять это, так как я сам начинающий в области технологий.

0

Решение

Вы определили api как переменная класса (имущество). использование $this->api чтобы получить доступ к этой переменной класса (свойство) в других методах вашего класса.

// This class probably inherits some base class
class Demo extends BaseDemo
{

public function __construct()
{

parent::__construct(new PaymentModel);

$this->api = new Api(config("razorpay", "key_id"), config("razorpay", "key_secret"));

}

public function createOrder()
{
$order = $this->api->order->create();
echo '<pre>';
var_dump($order); die;

}
}

Также проверьте ваше определение класса — если parent::__construct() называется, тогда твой класс наверное наследуется какой-то базовый класс. Если это не так, удалите parent::__construct() вызов.

0

Другие решения

Для доступа к переменным объекта вам необходимо использовать $ this. В вашем случае измените первую строку в createOrder () на $order = $this->api->order->create();

Также вы, кажется, пытаетесь запустить конструктор родителей в вашем конструкторе. Но у класса нет родителя.

0

Чтобы иметь возможность использовать $ this-> api в своем классе, вам необходимо установить его в качестве атрибута.

так :

class Demo
{
private $api;

public function __construct()
{

parent::__construct(new PaymentModel);

$this->api = new Api(config("razorpay", "key_id"), config("razorpay", "key_secret"));

}

public function createOrder()
{
$order = $this->api->order->create();
echo '<pre>';
var_dump($order); die;

}
}

Также, как сообщают другие, вы должны создать родительский класс, в то время как ваш класс ‘Demo’ не расширяет какой-либо другой класс.

0

вы вызываете parent :: __ construct (new PaymentModel); в классе, который не распространяется ни на один базовый класс.

0

объявите переменную $ api в классе, тогда доступном только для тела другой функции

0