Я инициализировал новый экземпляр библиотеки в методе __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 и некоторые другие ответы здесь о переполнении стека, но все, что они сделали, это сбило меня с толку больше, чем помогло мне.
Пожалуйста, помогите мне понять это, так как я сам начинающий в области технологий.
Вы определили 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()
вызов.
Для доступа к переменным объекта вам необходимо использовать $ this. В вашем случае измените первую строку в createOrder () на $order = $this->api->order->create();
Также вы, кажется, пытаетесь запустить конструктор родителей в вашем конструкторе. Но у класса нет родителя.
Чтобы иметь возможность использовать $ 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’ не расширяет какой-либо другой класс.
вы вызываете parent :: __ construct (new PaymentModel); в классе, который не распространяется ни на один базовый класс.
объявите переменную $ api в классе, тогда доступном только для тела другой функции