С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
 Аватар для I159
4 / 4 / 1
Регистрация: 09.08.2009
Сообщений: 232

class и подключаемый файл

11.09.2010, 16:11. Показов 2474. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача стояла - создать подключаемый файл используя классы и соответственно подключить его к странице. Написав подключаемый файл page.inc почти в точности с учебника, с небольшими поправками, исходя из того что у меня уже было, я попытался его подключить к уже имеющейся странице. Однако в браузер ни что из page.inc не выводится. Тема классов для меня нова, поэтому вычленить свою ошибку мне сложно.
Страница в которую я подключал page.inc:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<html>
<head></head>
<body>
<table width=100%>
<tr>
<td colspan="3" height=30%><h1><p align="center">True rides;)</p></h1></td>
</tr>
<tr>
<?php
    //require('header.inc');
    function Content()
    {
        $cars = array('barkas1.jpg', 'cafer1.jpg', 'cafer2.jpg', 
        'type3.jpg', 'ghia2.jpg', 'golf1.jpg', 'golf2.jpg', 
        'microbus1.jpg', 'barkas2.jpg', 'microbus3.jpg', 'zhiguli1.jpg',
        'zhiguli2.jpg');
        shuffle($cars);
    
        for($i=0; $i<=2; $i++)
        {
            echo "<td><p align=\"center\"";
            $alt[$i] = $cars[$i];
            echo "<img width=\"300\"src=\"/cars/".$cars[$i]."\"title=\"".$alt[$i]."\">";
            echo "</p></td>";
        }
    }
    require('page.inc');
    $homepage = new Page();
    $homepage->content = Content();
    $homepage->Display;
    // <img src="/.../.../...">
    //include("footer.inc");
?>
</tr>
</table>
</body>
</html>
Сам page.inc довольно велик, он прикреплен к теме.
Вложения
Тип файла: zip page.zip (1.1 Кб, 18 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.09.2010, 16:11
Ответы с готовыми решениями:

Не выводится подключаемый файл
Всем привет! Кто-нибудь подскажите.. У меня несколько html страничек, хочу вставить в каждую рекламный баннер, и чтоб в каждую не...

Передача объявленных переменных в подключаемый файл(в функции)
Решил интереса ради попробовать реализовать систему представлений как в Laravel Создал глобальные ф-ции для вызова файлов. ...

Как поменять кнопку "выбрать файл" в форме обратной связи (class.phpmailer.php)?
Уважаемые программисты, добрый вечер! Помогите, пож-ста, справиться с такой задачкой. Есть форма обратной связи. Два файла в общей...

20
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
11.09.2010, 16:24
Цитата Сообщение от I159 Посмотреть сообщение
PHP
1
$homepage->Display;
Тут Вам не паскаль. Надо скобки.
PHP
1
$homepage->Display();
1
 Аватар для I159
4 / 4 / 1
Регистрация: 09.08.2009
Сообщений: 232
12.09.2010, 10:51  [ТС]
Начал разбирать код page.inc по частям, точнее по неработающим частям. Есть вот такой код:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
    class Menu
    {
        public $buttons = array
        (
            'главная' => 'indexclass.php',
            'заказ'   => 'form1.php',
            'связь'   => 'pfeed1.php'
        );
        
        
         public function DisplayMenu($buttons)
        {
            echo "<table width=100% bgcolor='white>' cellpadding='4' cellspacing='4'\n<tr>\n";
            // вычисление размера кнопки
            $width = 100/count($buttons);
            while (list($name, $url) = each($buttons))
            {
                $this -> DisplayButtons($width, $name, $url);
            }
                echo "</tr>\n </table>\n";
        }
        
        
        
        public function DisplayButtons($width, $name, $url, $active = TRUE)
        {
            if ($active)
            { 
                echo "<td width='".htmlentities($width)."%'>
                <a href='".htmlentities($url)."'><span class='menu'>".$name."</span></a></td>";
            }
            else
            {
                echo "<td width='".htmlentities($width)."%' bgcolor='red'>".$name."</span></td>";
            }
        }
     }
?>
Код должен вывести три кнопки.
Вызываю этот код я в другом файле:
PHP
1
2
3
4
5
6
7
<html>
<?php
    require ('testmenu.inc');
    $homepage = new Menu;
    $homepage -> DisplayMenu($buttons);
?>
</html>
В итоге, в функции DisplayMenu() переменная $buttons не видна
Warning: Division by zero in Z:\home\hs.com\www\test\testmenu.inc on line 16

Warning: Variable passed to each() is not an array or object in Z:\home\hs.com\www\test\testmenu.inc on line 17
. В чем тут проблема?
0
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
12.09.2010, 11:04
Цитата Сообщение от I159 Посмотреть сообщение
Warning: Division by zero
У Вас там была опечатка: $buttoms в строке
PHP
1
public function DisplayMenu($buttoms)
0
 Аватар для I159
4 / 4 / 1
Регистрация: 09.08.2009
Сообщений: 232
12.09.2010, 11:37  [ТС]
Цитата Сообщение от Vovan-VE Посмотреть сообщение
У Вас там была опечатка: $buttoms в строке
PHP
1
public function DisplayMenu($buttoms)
Хм, все проверил, тупняков нет - переменная вызвана везде одинаково, но проблема на месте.
0
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
12.09.2010, 11:53
Цитата Сообщение от I159 Посмотреть сообщение
PHP
1
$homepage -> DisplayMenu($buttons);
PHP
1
$homepage->DisplayMenu($homepage->buttons);
0
 Аватар для I159
4 / 4 / 1
Регистрация: 09.08.2009
Сообщений: 232
12.09.2010, 12:12  [ТС]
Цитата Сообщение от Vovan-VE Посмотреть сообщение
PHP
1
$homepage->DisplayMenu($homepage->buttons);
Fatal error: Cannot access empty property in Z:\home\hs.com\www\test\testpage.php on line 5
Теперь вот так. Область видимости мне ещё не понятна. Поясни пож, почему ты решил сделать именно так?
0
 Аватар для romchiksoad
1957 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
12.09.2010, 12:23
I159, вместо $homepage напишите $this.
0
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
12.09.2010, 12:34
Цитата Сообщение от I159 Посмотреть сообщение
Fatal error: Cannot access empty property in Z:\home\hs.com\www\test\testpage.php on line 5
Вы точне написали не $homepage->$buttons ?
0
 Аватар для I159
4 / 4 / 1
Регистрация: 09.08.2009
Сообщений: 232
12.09.2010, 12:40  [ТС]
Цитата Сообщение от romchiksoad Посмотреть сообщение
I159, вместо $homepage напишите $this.
PHP
1
2
3
4
5
6
7
<html>
<?php
    require ('testmenu.inc');
    $homepage = new Menu;
    $homepage -> DisplayMenu($this->buttons);
?>
</html>
Fatal error: Using $this when not in object context in Z:\home\hs.com\www\test\testpage.php on line 5
А можно с комментариями по поводу области видимости?

Добавлено через 1 минуту
Цитата Сообщение от Vovan-VE Посмотреть сообщение
Вы точне написали не $homepage->$buttons ?
Да, есть такая ошибка - исправил

Добавлено через 1 минуту
Но ошибка та же.
0
 Аватар для romchiksoad
1957 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
12.09.2010, 12:50
Цитата Сообщение от I159 Посмотреть сообщение
Fatal error: Using $this when not in object context in Z:\home\hs.com\www\test\testpage.php on line 5
Извиняюсь, я не внимательно посмотрел Ваш код, там $this не катит. Сейчас посмотрим

Добавлено через 1 минуту
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
    class Menu
    {
        public $buttons = array
        (
            'главная' => 'indexclass.php',
            'заказ'   => 'form1.php',
            'связь'   => 'pfeed1.php'
        );
        
        
         public function DisplayMenu()
        {
            echo "<table width=100% bgcolor='white>' cellpadding='4' cellspacing='4'\n<tr>\n";
            // вычисление размера кнопки
            $width = 100/count($this -> buttons);
            while (list($name, $url) = each($this -> buttons))
            {
                $this -> DisplayButtons($width, $name, $url);
            }
                echo "</tr>\n </table>\n";
        }
        
        
        
        public function DisplayButtons($width, $name, $url, $active = TRUE)
        {
            if ($active)
            { 
                echo "<td width='".htmlentities($width)."%'>
                <a href='".htmlentities($url)."'><span class='menu'>".$name."</span></a></td>";
            }
            else
            {
                echo "<td width='".htmlentities($width)."%' bgcolor='red'>".$name."</span></td>";
            }
        }
     }
?>
Вот так должно работать

Добавлено через 4 минуты
По поводу области видимости.
public - виден отовсюду и изменять можно так же - везде;
private - виден только внутри текущего класса ( не объекта класса ) и изменять можно только в текущем классе;
pritected - виден в текущем классе и классе, которые наследует методы и свойства этого класса ( extends );
1
 Аватар для I159
4 / 4 / 1
Регистрация: 09.08.2009
Сообщений: 232
12.09.2010, 12:59  [ТС]
romchiksoad, объясни пожалуйста какую функцию выполняет $this->? Несколько раз прочел в учебнике и руководстве, как использовать не понял.
0
 Аватар для romchiksoad
1957 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
12.09.2010, 13:32
I159, если просто, то $this используется для указания того, что свойство нужно брать из текущего класса.
1
 Аватар для I159
4 / 4 / 1
Регистрация: 09.08.2009
Сообщений: 232
12.09.2010, 13:46  [ТС]
Встроил получившийся код в page.inc. Теперь при подключении page.inc к странице, контент страницы отображается вверху, а шапка, меню и футер формируемые page.inc внизу, хотя контент страницы должен быть между меню и футером. Это функция вызывающая содержимое page.inc в браузер:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
public function Display()
        {
            echo "<html>\n<head>\n";
            $this -> DisplayTitle();
            $this -> DisplayKeywords();
            $this -> DisplayStyles();
            echo "</head>\n<body>\n";
            $this -> DisplayHeader();
            $this -> DisplayMenu($this -> buttons)."<br>";
            echo $this->content;
            $this -> DisplayFooter();
            echo "</body>\n</html>";
        }
Это страница к которой происходит подключение:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
require ('page.inc');
  function Content()
  {  
    ?>
    <table width=100%>
    <tr>
    <td colspan="3" height=30%><h1><p align="center">True rides;)</p></h1></td>
    </tr>
    <tr>
    <?php
        $cars = array('barkas1.jpg', 'cafer1.jpg', 'cafer2.jpg', 
        'type3.jpg', 'ghia2.jpg', 'golf1.jpg', 'golf2.jpg', 
        'microbus1.jpg', 'barkas2.jpg', 'microbus3.jpg', 'zhiguli1.jpg',
        'zhiguli2.jpg');
        shuffle($cars);
    
        for($i=0; $i<=2; $i++)
        {
             echo "<td><p align=\"center\"";
             $alt[$i] = $cars[$i];
             echo "<img width=\"300\"src=\"/cars/".$cars[$i]."\"title=\"".$alt[$i]."\">";
             echo "</p></td>";
        }
    ?>
    </tr>
    </table>
    <?php
    }
    $homepage = new Page();
    $homepage -> content = Content();
    $homepage -> Display();
?>
Исправленный файл page.inc в приложении.
Как контент страницы встроить между меню и футером формируемыми page.inc?
Вложения
Тип файла: zip page.zip (1.1 Кб, 10 просмотров)
0
 Аватар для romchiksoad
1957 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
12.09.2010, 14:17
Нужно его расположить между ними как бы это объяснить... В общем на странице, которую выводите в браузер, нужно сначала вывести меню ( в вашем случае ) создав объект класса и т.д., потом весь контент( можно так же объектом класса ), а после этого футер таким же способом. Но лучше использовать шаблоны для этих целей. Т.е. написать один файл, которые будет хранить в себе весь дизайн, и в этот файле сделать не большие пометки в нужных частях станицы, для того, что бы можно было потом эти пометки заменить с помощью preg_replace, к примеру, на результат работы функции, класса или другого кода.
Что-то не могу я это объяснить должным образом... Может кто другой это сделает лучше
1
 Аватар для I159
4 / 4 / 1
Регистрация: 09.08.2009
Сообщений: 232
12.09.2010, 17:46  [ТС]
romchiksoad, как в объекте класса указать какую именно функцию класса я хочу вызвать в этом месте?

Добавлено через 2 минуты
И функция Display() не имеет тогда смысла, если она не упорядочивает вывод в браузер?

Добавлено через 42 минуты
В общем заработало, сделал вот так:
PHP
1
2
3
4
5
6
7
8
9
10
11
require ('page.inc');
    $meta = new Page();
    $meta ->DisplayMeta(); 
    $header = new Page();
    $header -> DisplayHeader();
    $menu = new Page();
    $menu -> DisplayMenu();
    $content = new Page();
    $content -> content = Content();
    $footer = new Page();
    $footer -> DisplayFooter();
Теперь получается функция Display() вообще не нужна.
0
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
12.09.2010, 17:49
Зачем каждый раз новый объект, если от этого ничего не зависит?
PHP
1
2
3
4
5
6
7
require ('page.inc');
    $page = new Page();
    $page ->DisplayMeta(); 
    $page -> DisplayHeader();
    $page -> DisplayMenu();
    $page -> content = Content(); // и это куда?
    $page -> DisplayFooter();
1
 Аватар для I159
4 / 4 / 1
Регистрация: 09.08.2009
Сообщений: 232
12.09.2010, 18:36  [ТС]
Vovan-VE, сейчас вот так:
PHP
1
2
3
4
5
6
7
8
9
<?php
    require ('page.inc');
    $page = new Page();
    $page -> DisplayMeta(); 
    $page -> DisplayHeader();
    $page -> DisplayMenu();
    $page -> content = require('index.inc');
    $page -> DisplayFooter();   
?>
Вывел контент страниц в подключаемые файлы, все работает отлично. На сколько такое решение функционально оправдано?
0
БТР - мой друг
 Аватар для Hagrael
333 / 277 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
13.09.2010, 12:59
I159, на все 100
1
 Аватар для I159
4 / 4 / 1
Регистрация: 09.08.2009
Сообщений: 232
13.09.2010, 23:33  [ТС]
Перешел к наследованию классов, и тут возникли вопросы. Использовал в качестве родительского класса уже обсужденный Page, в файле page.inc. Новый класс назвал Page2 и поместил в одноименный файл, внеся небольшие изменения, а именно изменил функцию DisplayFooter(), добавив повторяющее меню в нижней части сайта. Подключил к уже имеющемуся файлу index.php. однако никаких изменений не последовало.
Page2.inc:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
    require('page.inc');
    class Page2 extends Page
    {
        function DisplayFooter()
        {
            ?>
            <table width=100% bgcolor="CCCCCC" cellpadding="12" border="0">
            <tr>
            <?php
            $width = 100/count($this -> buttons);
            while (list($name, $url) = each($this -> buttons))
            {
                $this -> DisplayButtons($width, $name, $url);
            }
            ?>
            </tr>
            <tr>
            <td calspan="3"><p class="foot">&copy; Bob's Restoshop</p>
            <p class="foot"><div align="right"><a href="admin.php">Администрация заказов</a></div></p>
            </td>
            </tr>
            </table>
            </body>
            </html>
            <?php
        }
    }
?>
index.php:
PHP
1
2
3
4
5
6
7
8
9
<?php
    require ('page2.inc');
    $page = new Page2();
    $page -> DisplayMeta(); 
    $page -> DisplayHeader();
    $page -> DisplayMenu();
    $page -> content = require('index.inc');
    $page -> DisplayFooter();   
?>
Что сделано не правильно? Как внести изменения в наследуемый класс?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.09.2010, 23:33
Помогаю со студенческими работами здесь

Подключаемый текстовый файл
Здравствуйте Пожалуйста помогите с написанием программы. Нужно написать на delphi &quot;Имеется текстовый файл. Получить текст в котором...

FF и IE не видят подключаемый css файл
FF и IE не видят подключаемый файл CSS. Подключаю таким образом: &lt;link rel=&quot;stylesheet&quot; type=&quot;css/text&quot;...

Перенести методы дружественного класса в подключаемый файл
Добрые люди, в отчаянии прошу помощи. Голова уже пухнет, не могу понять что куда откуда и как. Необходимо перенести описание всех методов...

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

Убираю код AJAX в подключаемый файл, и он перестает работать
Не пойму в чем проблема. Код AJAX работает, когда он прописан в хэде. Стоит только мне его перенести в подключаемый файл, он перестает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru