Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
2 / 2 / 1
Регистрация: 20.12.2013
Сообщений: 90
1

Перевод ядра с процедурки на ООП

05.06.2015, 22:27. Показов 1574. Ответов 27
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Недавно, начал свой движок написанный на процедурном PHP + MySQL переводить на PDO + ООП. При чем ООП начал изучать совсем недавно. В общем, возникла проблемы с переводом ядра.

Структура такова.
/incfiles/core.php - основной файл ядра движка. Тут инициализируются системные переменные, параметры сайта, подключение классов и т.д..
/incfiles/classes/core.php - тут хранится основной класс Core, который включает в себя важные функции, например функцию подключения языков, в дальнейшем используется в двиге.
/incfiles/classes/functions.php - дополнение к классу Core, с функциями типа обработки смайликов, BB-тегов и прочей фигни.

Собсно проблема в том, что сайт не хочет видеть класс Core. По крайней мере так пишет интерпретатор. Как устранить ошибки?
// Код далек от идеального, он и не доделан полностью в принципе, так что пальцем не тыкайте, какой я быдлокодер, знаю сам.
// Скриншот ошибки и файлы с /incfiles/ выложу ниже.

Заранее спасибо!
Миниатюры
Перевод ядра с процедурки на ООП  
Вложения
Тип файла: zip incfiles.zip (7.4 Кб, 3 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.06.2015, 22:27
Ответы с готовыми решениями:

Перевод гостевой книги с процедурного стиля на ООП
Всем привет! Есть у меня простенькая гостевая книга (файл index.php). На практике сказали...

Процедурки
procedure TForm1.Button1Click(Sender: TObject) begin .... end; //Вторая процедурка procedure...

Две процедурки
Подскажите пожалуйста. Вот есть база данных - таблицы customs(поля-family,TOWN(город).. ) ...

Процесс выполнения хранимой процедурки отобразить надо
Люди добре - подскажите как в Forms реализовать указанну задумку? А то юзер жмет на кнопку (идет...

27
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
06.06.2015, 09:07 2
Цитата Сообщение от MyZik Посмотреть сообщение
Собсно проблема в том, что сайт не хочет видеть класс Core. По крайней мере так пишет интерпретатор. Как устранить ошибки?
То есть то, что перед выводом этой ошибки у Вас вообще php код выводится - Вас не смутило?
0
89 / 87 / 49
Регистрация: 09.10.2014
Сообщений: 571
06.06.2015, 09:10 3
Привет, убери
PHP
1
define('HOME', $_SERVER['DOCUMENT_ROOT']);
оно тебя только запутает, указывай лучше относительные пути через ./
Вот это изменил, работает вроди

PHP
1
2
3
4
5
6
spl_autoload_register('__autoload');
function __autoload($name) {
    $file = './classes/' . $name . '.php';
    if (file_exists($file))
        require_once($file);
}
З.Ы . Где, спрашивается, индекс.похапе ??
0
2 / 2 / 1
Регистрация: 20.12.2013
Сообщений: 90
06.06.2015, 10:20  [ТС] 4
sash, спасибо, сейчас попробую.
Вот index.php.
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
40
41
42
43
44
45
46
47
48
49
50
<?php
# Старт сессий
session_name('sid');
session_start();
 
# Подключение основного системного файла
require_once('incfiles/core.php');
 
# Очистка запроса модуля
$module_url = Functions::txt($_GET['url']);
 
if (preg_match('/\.php$/i', $module_url)) $module_file = true;
else $module_file = false;
 
// Если запрашивается какой-либо модуль
if (!empty($module_url))
{
    // Проверяем существование
    if (file_exists(HOME .'/modules/'. $module_url) && $module_file == true)
    {
        # Подключаем модуль
        require_once(HOME .'/modules/'. $module_url);
    }
    else if (file_exists(HOME .'/modules/'. $module_url) && $module_file == false)
    {
        // Проверяем наличие главной страницы модуля
        if (file_exists(HOME .'/modules/'. $module_url .'/index.php'))
        {
            # Подключаем главную страницу модуля
            require_once(HOME .'/modules/'. $module_url .'/index.php');
        }
        else
        {
            # Подключаем главную страницу сайта
            require_once(HOME .'/modules/index.php');
        }
    }
    else
    {
        # Подключаем главную страницу сайта
        require_once(HOME .'/modules/index.php');
    }
}
else
{
    # Подключаем главную страницу сайта
    require_once(HOME .'/modules/index.php');
}
 
?>
Добавлено через 3 минуты
Цитата Сообщение от pav1uxa Посмотреть сообщение
То есть то, что перед выводом этой ошибки у Вас вообще php код выводится - Вас не смутило?
Смутило конечно, но не могу понять, почему так... В коде вроде как ошибок нет, чтобы он как текст выводился.
0
814 / 797 / 201
Регистрация: 21.09.2012
Сообщений: 2,656
06.06.2015, 10:25 5
Используй автозагрузку классов
0
2 / 2 / 1
Регистрация: 20.12.2013
Сообщений: 90
06.06.2015, 10:36  [ТС] 6
Dolphin, можно подробней? Вроде как есть этот код.
PHP
1
2
3
4
5
6
spl_autoload_register('__autoload');
function __autoload($name) {
    $file = './classes/' . $name . '.php';
    if (file_exists($file))
        require_once($file);
}
0
814 / 797 / 201
Регистрация: 21.09.2012
Сообщений: 2,656
06.06.2015, 10:41 7
А, не заметил, вижу что везде require_once.... поэтому и написал
0
89 / 87 / 49
Регистрация: 09.10.2014
Сообщений: 571
06.06.2015, 10:42 8
Ты на рабочем серваке сделай эхо константы HOME и всё поймёшь
0
814 / 797 / 201
Регистрация: 21.09.2012
Сообщений: 2,656
06.06.2015, 10:43 9
Но лучше использовать стандарт psr-4. Можно взять composer и использовать его класс автозагрузки
0
2 / 2 / 1
Регистрация: 20.12.2013
Сообщений: 90
06.06.2015, 11:02  [ТС] 10
sash, они работают... По крайней мере до того как я переводил движок на ООП все работало. Эти константы, вместе с функцией подключения к БД и системными настройками хранились в index.php.

Добавлено через 4 минуты
Вот. В отдельной странице сделал так.
PHP
1
2
3
4
5
6
<?
define('HOME', $_SERVER['DOCUMENT_ROOT']); // Серверный путь к сайту
define('URL', 'http://'. $_SERVER['HTTP_HOST']); // Полный HTTP-путь к сайту
 
echo HOME;
echo '<br />' . URL;
Выводится
C:/xampp/htdocs
http://localhost


Как и должно быть
0
89 / 87 / 49
Регистрация: 09.10.2014
Сообщений: 571
06.06.2015, 11:07 11
Хорошо что работают, но я бы так не усложнял. Как по мне нужно всё делать максимально просто, но не проще
Лучше тогда уже в константе указать путь http:// и т.д. но можно обойтись прекрасно и без этого, относительно скриптов указывать пути ./ и т.д
0
2 / 2 / 1
Регистрация: 20.12.2013
Сообщений: 90
06.06.2015, 11:13  [ТС] 12
sash, да, так и сделаю, спасибо
// Собсно, а как решить проблему описанную в ПП?
0
89 / 87 / 49
Регистрация: 09.10.2014
Сообщений: 571
06.06.2015, 11:21 13
Гдегде описанную?? V PoPe ?
0
2 / 2 / 1
Регистрация: 20.12.2013
Сообщений: 90
06.06.2015, 12:55  [ТС] 14
sash, первый пост

Добавлено через 34 минуты
В общем, ошибка, из-за которой показывался текст кода на странице была такова:
PHP
1
$core = new Core() or die('<b>Error with LiveCMS core</b>');
Нужно было убрать тег <b>.
Теперь, классы все еще не загружаются. Приходится подключать отдельно каждый с помощью include.
Код core.php:
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
<?
define('HOME', $_SERVER['DOCUMENT_ROOT']); // Серверный путь к сайту
define('URL', 'http://'. $_SERVER['HTTP_HOST']); // Полный HTTP-путь к сайту
 
/**
 * Системные настройки
**/
@ini_set('error_reporting', 7); // Ошибки интрепретатора
@ini_set('magic_quotes_gpc', 0); // Экранирование кавычек
@ini_set('magic_quotes_runtime', 0); // Экранирование кавычек
mb_internal_encoding('UTF-8'); // Кодировка по умолчанию
 
/**
 * Загружаем классы
 **/
spl_autoload_register('__autoload');
function __autoload($name) {
    $file = '/infiles/classes/' . $name . '.php';
    if (file_exists($file))
        require_once($file);
}
 
 
/**
 *  Системные переменные
**/
$core = new Core() or die('Error with LiveCMS core');
unset($core);
0
814 / 797 / 201
Регистрация: 21.09.2012
Сообщений: 2,656
06.06.2015, 13:01 15
Какая версия php?
0
2 / 2 / 1
Регистрация: 20.12.2013
Сообщений: 90
06.06.2015, 13:11  [ТС] 16
Dolphin, PHP Version 5.6.8
Создал новую страницу index2.php. Туда подключил /incfiles/core.php с помощью include_once. Странность в том, что ни одну функцию из этого файла не подключает.
Например, в core.php написал такой код:
PHP
1
2
3
function sss($var) {
    return $var;
}
И в index2.php вывожу
PHP
1
sss('lol');
Интерпретатор выдает: Fatal error: Call to undefined function sss() in C:\xampp\htdocs\index2.php on line 4
0
814 / 797 / 201
Регистрация: 21.09.2012
Сообщений: 2,656
06.06.2015, 13:14 17
Для php >= 5.3
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
<?php
 
define('HOME', __DIR__); // Серверный путь к сайту
define('URL', 'http://'. $_SERVER['HTTP_HOST']); // Полный HTTP-путь к сайту
 
/**
 * Системные настройки
**/
error_reporting(-1);
mb_internal_encoding('UTF-8'); // Кодировка по умолчанию
 
/**
 * Загружаем классы
 **/
spl_autoload_register(function($name) {
    $file = HOME.'/infiles/classes/' . $name . '.php';
    if(!file_exists($file)) {
        throw new Exception('Autoload class: File '.$file.' not found');
    }
 
    require $file;
});
 
 
/**
 *  Системные переменные
**/
$core = new Core();
0
2 / 2 / 1
Регистрация: 20.12.2013
Сообщений: 90
06.06.2015, 13:15  [ТС] 18
Я уже не знаю что делать.
Dolphin, та же проблема, опять... Да даже если константу HOME выводить, пишет, что такой не существует.
0
814 / 797 / 201
Регистрация: 21.09.2012
Сообщений: 2,656
06.06.2015, 13:21 19
этот код должен быть в индексном файле корня сайта
0
2 / 2 / 1
Регистрация: 20.12.2013
Сообщений: 90
06.06.2015, 13:21  [ТС] 20
Dolphin, а нет. Если вместо <?php писать <? то возникает эта ошибка.
А если так, как ты написал <?php то появляется следующее:
Fatal error: Uncaught exception 'Exception' with message 'Autoload class: File C:\xampp\htdocs\incfiles/infiles/classes/Core.php not found' in C:\xampp\htdocs\incfiles\core.php:26 Stack trace: #0 [internal function]: {closure}('Core') #1 C:\xampp\htdocs\incfiles\core.php(39): spl_autoload_call('Core') #2 C:\xampp\htdocs\index2.php(2): require_once('C:\\xampp\\htdocs...') #3 {main} thrown in C:\xampp\htdocs\incfiles\core.php on line 26
0
06.06.2015, 13:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.06.2015, 13:21
Помогаю со студенческими работами здесь

нетбук с каким процом лучше n550(2 ядра )или C-50(2 ядра )?
всем привет решил в следюющем году сдать егэ по инфе =&gt; надо готовится и учить програмирование а...

Помогайте выбрать: видюха 640М и проц i7 2.4Гц (4 ядра) или 750M и i7 2Гц (2 ядра) ?
Приветствую. Вот занес уже руку в кошелек для покупки ноута Acer ASPIRE V5-572G но тот...

Что будет лучше i7 2630qm (2 Гц 4 ядра) vs i5 3230m (2,6 Гц 2 ядра) ?
Что будет лучше i7 2630qm (2 Гц 4 ядра) vs i5 3230m (2,6 Гц 2 ядра) ? Не использую программы...

Что выбрать: Intel 2 ядра или AMD 4 ядра?
Нужен дельный совет от гуру! Могу взять АМД проц 4 ядра, либо интеловский 2 ядерный, цена примерно...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru