Переменная конструктора php недоступна в функциях ниже - PullRequest
0 голосов
/ 26 октября 2018

Я инициализировал новый экземпляр библиотеки в методе __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 и некоторые другие ответы здесь о переполнении стека, но все, что они сделали, это сбило меня с толку больше, чем помогло мне.

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

Ответы [ 5 ]

0 голосов
/ 02 ноября 2018

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

0 голосов
/ 26 октября 2018

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

0 голосов
/ 26 октября 2018

Вы определили 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() call.

0 голосов
/ 26 октября 2018

Чтобы иметь возможность использовать $ 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 голосов
/ 26 октября 2018

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

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

...