Master-X
Регистрация
|
Вход
Форум
|
Новости
|
Статьи
Главная
»
Форум
»
Программинг, Скрипты, Софт, Сервисы
»
Тема:
Функция с вложенными функциями. Возможно?
Новая тема
Ответить
цитата
12/05/12 в 19:17
Lexikon
Написал код1, в этом коде есть пару самописных функций.
Теперь хочу этот код1 сделать функцией вынести это в отдельный файл и прикрутить к другому коду2.
Возможно ли такое? Просто смущает то что написанная функция будет содержать в себе еще функции.
Последний раз редактировалось: Lexikon (
14/05/12 в 12:29
), всего редактировалось 1 раз
цитата
12/05/12 в 19:39
ibiz
такое возможно
но лучше сделать класс
цитата
12/05/12 в 20:12
Ailk
ага, изучай ООП. Оч удобно!
цитата
12/05/12 в 20:22
FTS
Да
цитата
13/05/12 в 11:00
freeek
конечно это будет смущать, эти функции то попадут в глобальную область видимости.
т.е. тут вариант, что эти функции будут дальше существовать сами по себе.
можно использовать статический метод класса.
но если рассматривать это в рамках ооп, получается сложнее. это наверное похоже чем то "фасад", объединяем некий функционал, по один интерфейс.
цитата
13/05/12 в 21:45
Lexikon
всем спасибо.
буду пробовать
цитата
14/05/12 в 15:51
Lexikon
с классами так что то и не получилось разобраться, вернее сложилось такое впечатление что применения класса тут неумесно, хотя х.з., может ошибаюсь.
Есть у меня файл с готовым рабочим кодом, но тут решил усовршенствовать, отдельно написал код этого усовершенства и сделал это как собственной функцией в которой есть еще пару функцияй т.е. выглядет это примерно так:
Файл: function.php
function UNIQ($subject){
function random($filename) {
...
}
function string_sort($a, $b){
...
}
...
}
если я создаю файл result.php с кодом:
<?php
require_once("function.php");
$subject = "тут текст для обработки";
echo UNIQ($subject);
?>
в этом случае все работает нормально.
НО, как только я подключаю function.php в index.php
с таким содержанием:
function getLimitText($text, $limit) {
...
}
require_once("function.php");
... остальной код ...
выдается такая вот ошибка:
Fatal error: Cannot redeclare random() (previously declared in function.php)
невозможно переопределить что то в функции random()
как только я убераю функциию random() начинает ругаться на следующую
т.е. на string_sort()
Х.з. отдельно работает, а в связке нет.
цитата
14/05/12 в 16:09
ibiz
Код:
function UNIQ($subject){
function random($filename) {
...
}
function string_sort($a, $b){
...
}
...
}
прикол
по идее надо делать так:
Код:
function UNIQ($subject){
random($filename);
string_sort($a, $b);
}
function random($filename) {
...
}
function string_sort($a, $b){
...
}
но я бы настоятельно рекомендовал попробовать изучить классы
цитата
14/05/12 в 17:52
Ailk
создаешь файл my_class.php
Содержание my_class.php
<?php
class My_Class
{
public $filename; // задаем имя файла, как хошь, по умолчанию будет му_филенаме.екст
public $subject // сабж твой
public function __construct ($filename = "") // конструктор класса, тут при вызове класса задаются параметры сразу. в общем если нет имя файла, то будет такой
{
if (!$filename || empty($filename))
$filename = "my_filename.ext";
}
// функция уник. вызываешь сабж тут вот этой переменной $this->subject и работаешь с ней
public function UNIQ ()
{
$this->random();
//...
$this->string_sort($a, $b);
//...
return $resultat;
}
public function random ()
{
// file($this->filename); вот так примерно вызываешь файл свой, или как оно у тебя устроено...
}
public function string_sort ($a, $b) // я бы порекомендовал использовать встроенную функцию sort() или более подходящую из числа функций сортировки массивов.
{
...
}
public function displayResult() // ну тут вывод результатов, можно снабдить хтмл тегами. чтобы не мешать логику и вывод
{
echo $this->UNIQ();
}
}
?>
в индексе работаешь так:
<?php
include_once ("my_class.php");
$class = new My_Class (); // создаем экземпляр нашего класса
$class->subject = "тут мой сабж типо"; // задаем сабж
$class->displayResult(); // и выводим
цитата
14/05/12 в 18:43
Lexikon
касаемо:
Цитата:
public function string_sort ($a, $b) // я бы порекомендовал использовать встроенную функцию sort() или более подходящую из числа функций сортировки массивов.
там написана функция сортировки массива по количиству символов в строках.
так что вроде продругому не получится.
А так буду разбираться в классах, постараюсь собрать всё в бошке
Благодарю за помощь.
цитата
15/05/12 в 09:21
Lexikon
походу я туповат
<?php
//----------- Функция сортировки Массива ------------
function string_sort($a, $b){
if ( strlen ($a) < strlen($b) )
{
return 1;
}
elseif ( strlen ($a) == strlen($b) )
{
return 0;
}
else
{
return -1;
}
}
//---------------------------------------------------
// Текст для обработки
$subject = "A blonde girl is playing a tambourine when a guy outside throws a snowball against her window. She puts on a coat and goes outdoors for a snow fight with the guy. When she is laying on the ground he bares her tits and puts his cold hands on them. Finally, they go indoors for a fuck.";
// Директория с файлами синонимов.
$syn_dir = "synonyms";
// Читаем содержимое файла в массив
$pattern = file("keys.dat");
// Сортируем массив по убыванию длин строк.
usort($pattern, 'string_sort');
// Определяем кол-во элеменов массива.
$cnt_pattern = count($pattern);
// Запускаем цикл прохода по тексту.
for ($z = 0; $z < $cnt_pattern; $z++) {
// Получаем путь к файлу с текстом замены.
$replacement = str_replace(" ", "-", "./".$syn_dir."/".trim($pattern[$z]).".txt");
// Получаем рандомный кей для замены
$lines = file($replacement);
$replacement = $lines[array_rand($lines)];
// Присваиваем переменной значение слова поиска и удаляем возможные пробелы по краям.
$pattern_i = trim($pattern[$z]);
// С помощью регулярки проходим по тексту с целью поиска разно-регистровых слов
// и заменяем согласно регитру.
$subject = preg_replace("#\b$pattern_i\b#", $replacement, $subject);
$pattern_i = ucfirst($pattern_i);
$replacement = ucfirst($replacement);
$subject = preg_replace("#\b$pattern_i\b#", $replacement, $subject);
$pattern_i = strtoupper($pattern_i);
$replacement = strtoupper($replacement);
$subject = preg_replace("#\b$pattern_i\b#", $replacement, $subject);
}
// Удаляем лишнии символы пробелов.
$subject = preg_replace("#(\s+)#", " ", $subject);
$subject = str_replace(" .", ".", $subject);
// Результат.
echo $subject;
?>
это я написал код синонимайзера, но вот теперь мучаюсь с ним немогу его прикрутить к другому коду. чтоб отдавать $subject; с исходным текстом и на выходе получить $subject; уже обработанный
цитата
15/05/12 в 09:46
AWD
дык заверни все это дело в функцию и все.
Код:
function synonymize($subject) {
// Директория с файлами синонимов.
$syn_dir = "synonyms";
...........
// Результат.
// echo $subject;
// Вместо вывода echo возвращаем return сабж
return $subject;
}
ну и дальше вызывай echo synonymize("text for synonymize");
или
$subject = "text for synonymize";
$my_synonym[] = synonymize($subject);
как-то так.
Новая тема
Ответить
Эта страница в полной версии