Как вызвать функцию в свойстве метода класса?

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

Поскольку я студент-самоучка, недавно я начал изучать классы PHP, поэтому я не совсем уверен, можно ли это сделать или нет.

Подскажите, пожалуйста, как это можно сделать правильно, а если нет, то какой может быть обходной путь?

Класс, который я написал, выглядит следующим образом: Он будет принимать ввод от пользователя при создании экземпляра и отображать модальное поле на основе ввода и выбранных параметров.

class modalBox{
        private $modal_id, $modal_anim, $header_title, $modal_content,$footer;
        private $headerOpt,$titleOpt,$footerOpt,$closeBtn;

        public function setID($id){
            $this->modal_id = $id;
        }

        public function getID(){
            $modal_id = $this->modal_id;
            return $modal_id;
        }
        public function setTitle($title){
            $this->header_title = $title;
        }

        public function getTitle(){
            $title = $this->header_title;
            return $title;
        }

        public function setBodyContent($content){
            $this->modal_content = $content;
        }

        public function getBodyContent(){
            $modalContent = $this->modal_content;
            return $modalContent;
        }

        public function setFooterContent($footer){
            $this->footer = $footer;
        }

        public function getFooterContent(){
            $footerContent = $this->footer;
            return $footerContent;
        }

        public function initiateModal($modal_anim, $headerOpt, $titleOpt, $closeX, $footerOpt, $footerCloseBtn){ ?>

            <div class = "modal <?php if ($modal_anim != 'false'){echo $modal_anim;} ?>" id = "<?php echo $this->getID(); ?>" style = "z-index: 2;"> 
                <div class='modal-dialog'>
                    <div class='modal-content'>
                        <?php
                            // display if header option is set to true
                            if ($headerOpt){
                        ?>
                            <div class = "modal-header">
                            <h4><?php echo $this->getTitle(); ?></h4>
                            <?php
                                // display if close button (X) is set to true
                                if ($closeX){
                            ?> <button type = "button" class = "close" data-dismiss = "modal">&times;</button> <?php } ?>
                            </div>
                        <?php } ?>
                            <div class = "modal-body"><?php echo $this->getBodyContent(); ?></div>
                        <?php if ($footerOpt){ ?>
                            <div class = "modal-footer"><?php echo $this->getFooterContent(); ?>
                            <?php if ($footerCloseBtn){ ?>
                                <button type = "button" class = "btn btn-danger" data-dismiss = "modal">Cancel</button>
                            <?php } ?>
                            </div>
                        <?php } ?>
                    </div>
                </div>
            </div>
        <?php
        }
    }
?>

Функция, которую я пытаюсь вызвать в свойстве, выглядит следующим образом: Эта функция не находится внутри класса. Это присутствует независимо в functions.php, который я включил в индексный файл.

function getDocNameList() {
        global $db;
        $getDoc = $db->prepare("SELECT id,doc_name from doctor");
        $getDoc->execute();
        while($docName = $getDoc->fetch(PDO::FETCH_ASSOC)){

// print the returned rows in options list of <select>
            echo "<option value='".$docName['id']."'>".$docName['doc_name']."</option>";
        }
    }

Инициация экземпляра класса выглядит следующим образом. Обратите внимание, где я вызываю функцию.

// create class instance
            $rangeModal = new modalBox;

            //set the modal id
            $rangeModal->setID ("rangeFields");

            //set the modal title in header
            $rangeModal->setTitle("Select Date Range");

            // set the body content
            $rangeModal->setBodyContent("
                <form method='post' action='expenditure.php'>
                    <div role='wrapper' class='input-group mb-3'>
                        <input id='datepicker1' name='exp_date_from' value='From Date' required/>
                    </div>
                    <div role='wrapper' class='input-group mb-3'>
                        <input id='datepicker2' name='exp_date_to' value='To Date' required/>
                    </div>
                    <div role='wrapper' class='input-group mb-3'>
                        <select>" . getDocNameList() . "</select>
                    </div>

            ");

            //set the footer content
            $rangeModal->setFooterContent("
                <input type='submit' class='btn btn-success' name='submitRange' />
                </form>
            ");

            /*
            *   @args ---
            *   modal animation
            *   modal header (boolean)
            *   modal title (boolean)
            *   modal close X (boolean)
            *   modal footer (boolean)
            *   modal footer close button (boolean)
            */

            // initiate modal
            $rangeModal->initiateModal('fade',true,true,true,true,true);

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

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
85
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы echo это здесь, поэтому оно будет отображаться сразу:

echo "<option value='".$docName['id']."'>".$docName['doc_name']."</option>";

Таким образом, здесь нет конкатенации, функция ничего не делает:

<select>" . getDocNameList() . "</select>

Создайте его и return вместо этого:

$output = '';

while($docName = $getDoc->fetch(PDO::FETCH_ASSOC)){
    $output .= "<option value='".$docName['id']."'>".$docName['doc_name']."</option>";
}
return $output;

Или создайте массив и соедините элементы:

while($docName = $getDoc->fetch(PDO::FETCH_ASSOC)){
    $output[] = "<option value='".$docName['id']."'>".$docName['doc_name']."</option>";
}
return implode($output);

Хороший выбор, но ему нужно поместить значения все в строку и вернуть это... (эхо находится в цикле while)

Nick 08.04.2019 15:34

@AbraCadaver Вау. Это сработало как шарм. Только что узнал новую вещь :) Большое спасибо :)

Muneeb aslam 08.04.2019 15:45

Другие вопросы по теме