Как получить URL-параметры в классе PHP - PullRequest
0 голосов
/ 17 апреля 2019

Я купил кучу кода для добавления событий Facebook на сайт, который я создаю.Общая цель - иметь разные страницы для разных мест.Каждое место будет иметь свою собственную страницу / события на фейсбуке, и я хочу показать эти события.

У меня есть все, кроме одной маленькой проблемы.Я могу получить данные из параметров url, отправленных на страницу с базовым php (см. Ниже), но класс в коде не позволит мне это сделать.

$access_token= $_GET['access_token'];
$fb_page_id= $_GET['fb_page_id'];
// this works fine in a basic php file

Я уже несколько часов гуглю иЯ не могу найти решение этой проблемы.

Ниже приведено то, что, как я думал, будет работать при добавлении того же кода, но в класс.

class DsmFacebookEvents{

    public $access_token= $_GET['access_token'];
    public $fb_page_id= $_GET['fb_page_id'];

Пожалуйста, обратите внимание, что я не профессионал с PHPи я подумал, что добавление 'public' решит проблему (так как все другие переменные в классе имеют это)

Я получаю сообщение об ошибке на странице, говорящее ...

Parse error:  syntax error, unexpected '$_GET' (T_VARIABLE) in (location)

Если я вызываю переменную с пользовательскими данными (см. Ниже), она работает нормально.Все, что я хочу сделать, это получить данные из URL или из другого файла PHP.Но я не уверен, смогу ли я справиться, что это все внутри классов.

 public $access_token= "access_token_here";

1 Ответ

1 голос
/ 17 апреля 2019

Вы можете переместить параметры времени выполнения в конструктор двумя способами. https://www.php.net/manual/en/language.oop5.decon.php

Вариант А)

class DsmFacebookEvents
{
  public $access_token;
  public $fb_page_id;
  public function __construct()
  {
    if( !empty( $_GET['access_token'] ) )
    {
      $this->access_token = $_GET['access_token'];
    }
    if( !empty( $_GET['fb_page_id'] ) )
    {
      $this->fb_page_id = $_GET['fb_page_id'];
    }
  }
}

Вариант B)

class DsmFacebookEvents
{
  public $access_token;
  public $fb_page_id;
  public function __construct( $access_token, $fb_page_id )
  {
    $this->access_token = $access_token;
    $this->fb_page_id = $fb_page_id;
  }
}

$foo = new DsmFacebookEvents( $_GET['access_token'], $_GET['fb_page_id'] );

Второй вариант, который я считаю лучше, так как он отключает источник значений из определения класса. Вы все еще можете сделать их необязательными, изменив конструктор, или создав функции-установщики, или просто оставив параметры общедоступными.

__construct() вызывается каждый раз при создании экземпляра объекта класса.

...