Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> extract($GLOBALS), Работа в функциях 
:(
    Опции темы
neoks
Дата 9.6.2011, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



Хотел спросить о безопасности использования.
В функциях использую вот такой код.
Код

function name(){
    extract($GLOBALS);
   ...
}


Так вот, можно ли ее использововать не боясь о безопасности и как можно написать правильно.
PM MAIL   Вверх
Absinthe
Дата 10.6.2011, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 4.5.2011

Репутация: 5
Всего: 11



Данная функция не влияет на безопасность.
Данная функция влияет на качество кода, превращая его в типичную бейсикоподобную лапшу. Проще говоря в ###код.

Постарайся свести количество глобальных переменных к 1($application). 

$application = new Application();
$application->start();
PM MAIL   Вверх
neoks
Дата 10.6.2011, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



Вот что вышло

Код

Fatal error: Class 'Application' not found in Z:\home\portal_sl.com\www\system\function.php on line 699


Как я понял это класс которого не существует.
PM MAIL   Вверх
Absinthe
Дата 10.6.2011, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 4.5.2011

Репутация: 5
Всего: 11



Цитата

Как я понял это класс которого не существует.
 Это класс твоего приложения, которое ты сделаешь. В идеале $application - единственная глобальная переменная.
PM MAIL   Вверх
neoks
Дата 10.6.2011, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



Что то не совсем понял зачем этот класс.
Ситуация такая, есть функция и вней некий код которому нужны слассы подклучения к mysql и другие переменные.
Но есть одно но, чтоб получить к ним доступ нужно в функции прописывать global ... ;

Вот долго не думая решил прописать extract($GLOBALS);, но вот теперь сомневаюсь в безопасности этого метода.

В нете искал не чего толкого не нашол, вот и спросил   smile 
PM MAIL   Вверх
Absinthe
Дата 10.6.2011, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 4.5.2011

Репутация: 5
Всего: 11



Цитата

Но есть одно но, чтоб получить к ним доступ нужно в функции прописывать global ... ;
 Если тебе надо много внешних данных - то это ошибка проектировния.
Допустим если ты только учишь PHP и не используешь ООП - то тебе понадобится, к примеру, global $db;

Пишешь так:
Код

function f() {
    global $db;
    // ...
}

Но это исключение для объектов типа $db или $config. Наличие слова global в коде говорит о его плохом качестве.

Если нужны другие данные - передавай их в функцию:
function getContents($itemsData, $template) {}

PM MAIL   Вверх
neoks
Дата 10.6.2011, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



Absinthe
Я не такой уж новичок, я знаю все тонкости функций но тут столкнулся с проблемой.

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

Ну и я чтоб запомнить и каждый раз не писать код для проверки я сделал функцию, но сразу столкнулся с проблемой.
Вот и решил спросить в правильности такой конструкции extract($GLOBALS), global не подходит из за того что для каждого кода придется прописывать свой global.
PM MAIL   Вверх
нуп
Дата 10.6.2011, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ботокодер
**


Профиль
Группа: Участник
Сообщений: 987
Регистрация: 22.6.2009
Где: Кременчуг

Репутация: нет
Всего: 33



Цитата(Absinthe @  10.6.2011,  14:42 Найти цитируемый пост)
Наличие слова global в коде говорит о его плохом качестве.

Почему?  smile 
PM MAIL   Вверх
Absinthe
Дата 10.6.2011, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 4.5.2011

Репутация: 5
Всего: 11



Цитата

и ясен красен мне приходится использовать некую конструкция для проверки, мов если оброшяется AJAX то выводить в печать, если файл подключается то запихивать в некую переменную.
Всмысле подключается? У твоего сайта сколько точек входа? Больше, чем одна?
Если да, то советую читать это: http://forum.vingrad.ru/forum/topic-330866...ule-system.html


Цитата

Почему? 
 Попробуй отладить код размером в пару мегабайт в таком стиле(какой-нибудь старый движок форума).

Это сообщение отредактировал(а) Absinthe - 10.6.2011, 16:53
PM MAIL   Вверх
neoks
Дата 10.6.2011, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



Цитата

Всмысле подключается? У твоего сайта сколько точек входа? Больше, чем одна?

Да, это движок cms, но я сделал оригинальную идею один файл подключаю для AJAX и PHP.
У стандартных движках идет стандартный вывод, один файл для AJAX и один для PHP но отличия между ними нет.

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

Результат я пихая через eval.

Код

function print_content($data,$eval = false){
    extract($GLOBALS);
    
    global $content;
    if($get_go_jquery) print eval(content_eval($data));
    else               $content = $content.$data;


PM MAIL   Вверх
Absinthe
Дата 10.6.2011, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 4.5.2011

Репутация: 5
Всего: 11



Цитата

но я сделал оригинальную идею один файл подключаю для AJAX и PHP.
У стандартных движках идет стандартный вывод, один файл для AJAX и один для PHP но отличия между ними нет.
 1) Твоя идея правильная.
2) Но не оригинальная.
3) И в исполнении подкачал.

Делать так: если запрос аяксовый(определяется либо по заголовкам, либо через роутинг), то отдаешь data, если нет - то рендеришь data в шаблон и отдаешь уже html.

Это сообщение отредактировал(а) Absinthe - 10.6.2011, 17:36
PM MAIL   Вверх
neoks
Дата 10.6.2011, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



Цитата

Делать так: если запрос аяксовый(определяется либо по заголовкам, либо через роутинг), то отдаешь data, если нет - то рендеришь data в шаблон и отдаешь уже html.


Я сначала так и сделал, в каждый файл писал вот такой код.

Код

if($get_go_jquery) print eval(content_eval($data));
else               $content = $content.$data


Но потом решил облегчить себе задачу сделав такой меленький код.

Код

print_content($data);


Так ведь легче будет запомнить, но сомневаюсь в безопасности и правильности этого метода.
PM MAIL   Вверх
Absinthe
Дата 10.6.2011, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 4.5.2011

Репутация: 5
Всего: 11



Цитата

Так ведь легче будет запомнить, но сомневаюсь в безопасности и правильности этого метода.
 Ну так передавай в него data, template и isAjax. Зачем нужны остальные переменные типа $db?
PM MAIL   Вверх
neoks
Дата 10.6.2011, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



Цитата

Ну так передавай в него data, template и isAjax. Зачем нужны остальные переменные типа $db?


А зачем там прописана функция eval чтоб превратить html код в исполняемый php код и этому коду нужно будет $db или хз что еше.  smile 
PM MAIL   Вверх
Absinthe
Дата 10.6.2011, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 4.5.2011

Репутация: 5
Всего: 11



Цитата

А зачем там прописана функция eval 
 Какой нахрен eval? для чего?
Тебе надо либо в ясоне даные отдавать, либо html. Зачем eval то?

Цитата

и этому коду нужно будет $db или хз что еше. 
 Не нужны. Если нужны - то ты где-то ошибся.

Задавай вопросы про eval и $db - отвечу, где ты накосячил.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0932 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.