Как сохранить данные в переменной в функции класса, а затем получить к ним доступ снаружи - PullRequest
0 голосов
/ 29 декабря 2018

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

Ниже приводится средний код, который я выполняю

if($_GET['page'] == "tip" && isset($_GET['id']))
{
    static $title;
    static $status;
    static $featured_image;
    static $excerpt;

    include("config.php");

    class Tip Extends Connection
    {
        public function show()
        {
            $query = ' SELECT status, title, featured_image, excerpt from tips WHERE id = "'.$_GET['id'].'" ';
            $connection = $this->establish_connection();
            $data = $connection->query($query);
            $connection->close();

            if($data->num_rows > 0)
            {
                while($row = $data->fetch_assoc())
                {
                    $title = $row['title'];
                    $status = $row['status'];
                    $featured_image = $row['featured_image'];
                    $excerpt = $row['excerpt'];
                }
            }
            else
            {
                echo json_encode(array('status' => 'No Data Found'));
                exit();
            }
        }
    }
    $tip = new Tip();
    $tip->show();
}

Приведенный выше код выполняется в самый первый раз, когда страница загружается послечто я пытаюсь отобразить переменную во вводе HTML, как показано ниже.

<input type="text" autofocus id="tip_title" class="tip_title round form-control" placeholder="What's the title of your Post?" value="<?php echo $title; ?>" name="tip_title">

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

Ответы [ 2 ]

0 голосов
/ 30 декабря 2018

Если 4 статические переменные должны были быть свойствами объекта, вам нужно определить их в классе:

class Tip Extends Connection
{
    public $title;
    public $status;
    public $featured_image;
    public $excerpt;

... public function show()...

Ваш метод show() ничего не возвращает, поэтому я предполагаю, что выЯ просто хотел вызвать метод show один раз, чтобы заполнить открытые свойства, а затем вы отобразите значение этих свойств в некоторых других местах.

Если свойства определены как открытые, вы можете получить к ним доступ непосредственно к объекту:

$tipObject = new Tip();
$tipObject ->show();
echo $tipObject ->title; // no dollar sign after $this->

Кроме того, если они определены как статические, как в примере ниже, вы можете получить к ним доступ безобъект, созданный с использованием только имени класса:

class Tip Extends Connection
{
    public static $title;
    public static $status;
    public static $featured_image;
    public static $excerpt;

    ...
}

echo Tip::$title; // with the dollar sign after ::
0 голосов
/ 29 декабря 2018

$title не входит в сферу применения вашего метода show().

Просто добавьте global $title внутри метода.

Однако я предлагаю объявить переменные как свойства вашего класса Tip и получить к ним доступ, используя $tip->title;

...