Этот сайт не наркоманов. Это сайт программистов.

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Пыха переехала на новый сервер, ура!

Краснодарское время: 24 Май, 2012, 02:41:27

Страниц: 1 2 3 [4]
Печать
Автор Тема: Как узнать имя переменной, переданной в качестве аргумента ф-ии  (Прочитано 2883 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
master    ↓ 
11 Январь, 2012, 12:44:25
НЕ ХУЕТА! ХУЕТА!

Квадратов сколько видишь ты?
Группа: Джедаи

Карма: 44
Сообщений: 2080
Сила слова: 2.12

как вам такой код
уебанство
а что если $thisName == 'lorem*ipsum' ?
а что если надо передать аргументом не строку?
Записан

waff    ↓ 
11 Январь, 2012, 01:20:38 , спустя 36 минут 13 секунд
НЕ ХУЕТА! ХУЕТА!

Карма: 0
Сообщений: 7
Сила слова: 0

от части согласен с вами, от части нет. приведенный код как пример той мысли и расчитывалось только на строковый тип.
а для чего-то рабочего и гибкого можно, конечно, дописать чтобы работало не только со строками и т.п.
 
1-е. решается очень просто:
<?php
 
    function test ($name)
{
    // тут надо получить 'thisName'
     $arrvars = explode("*", $name);
$varname = end($arrvars);
return $varname; //thisName
}
$thisName = 'lorem*ipsum';
test($thisName.'*thisName'); //передаем имя
?>
2-е. тоже просто. например, вместо конкатенации можно передавать доп. аргумент.
<?php
 
    function test ($name, $varName)
{
    // тут надо получить 'thisName'
$var = $varName;
return $var; //thisName
}
$thisName = 'lorem*ipsum';
test($thisName, 'thisName');
?>
и всего делов. :)
Спустя 1 минуту 6 секунд добавил
упс, забыл в пхп тэги поместить код.
Записан
master    ↓ 
11 Январь, 2012, 01:29:34 , спустя 8 минут 56 секунд
НЕ ХУЕТА! ХУЕТА!

Квадратов сколько видишь ты?
Группа: Джедаи

Карма: 44
Сообщений: 2080
Сила слова: 2.12

waff, зачем это всё? я же написал как решается эта задача
« Последнее редактирование: 11 Январь, 2012, 01:29:34 от master » Записан

waff    ↓ 
11 Январь, 2012, 02:24:57 , спустя 55 минут 23 секунды
НЕ ХУЕТА! ХУЕТА!

Карма: 0
Сообщений: 7
Сила слова: 0

да делать нехуй. недавно писал шаблонизатор нужно было такое. а ваше решение как работает? объясните, если не влом, как оно решает задачу? весь прикол в том что движок автоматом передаёт результат функции? непонятно короче.
Записан
Frozzeg    ↓ 
11 Январь, 2012, 02:26:50 , спустя 1 минуту 53 секунды
НЕ ХУЕТА! ХУЕТА!

Группа: Пятросянище

Карма: 92
Сообщений: 5499
Сила слова: 1.67

adw0rd, как поживает мини-фреймворк?
Записан

Эксперт — это человек, который в узкой области допустил все возможные ошибки. © Нильс Бор.
Отложить на завтра — значит впасть в рекурсию. © Frozzeg
master    ↓ 
11 Январь, 2012, 03:08:57 , спустя 42 минуты 7 секунд
НЕ ХУЕТА! ХУЕТА!

Квадратов сколько видишь ты?
Группа: Джедаи

Карма: 44
Сообщений: 2080
Сила слова: 2.12

waff,
суть в следующем:
контроллер упаковывает переменные функцией compact, а шаблонизатор распаковывает полученный массив функцией extract в локальном пространстве имён
пример:
 
PHP

//функция, имитирующая функцию контроллера
function foo(){
$name = 'Vasya';
$age = 27;
return compact('name', 'age');
}
 
//функция, имитирующая шаблонизатор
function fetch($params){
extract($params); // распаковываем в локальное пространство имён
ob_start();
include('template.php');
return ob_get_clean();
}
 
print fetch(foo());
 

template.php
PHP

<div>
Меня зовут <?= $name ?>, мне <?= $age ?> лет
</div>
 

плюсы:
compact не ругается на несуществующие переменные. правда, их отсутствие обнаружится в шаблоне, будут нотайсы, но их можно отключить через error_reporting
имена переменных в контроллере совпадают с именами переменных в шаблоне, всё наглядно
 
как именно будут передаваться данные в шаблонизатор - автоматически или вручную - не принципиально. просто автоматически удобнее, можно например условиться что функции foo соответствует шаблон foo.php, функции foo1 - foo1.php и т.д.. передачу параметров можно привязать к любому шаблонизатору.
« Последнее редактирование: 11 Январь, 2012, 03:08:57 от master » Записан

waff    ↓ 
12 Январь, 2012, 12:49:52 , спустя 9 часов 40 минут 55 секунд
НЕ ХУЕТА! ХУЕТА!

Карма: 0
Сообщений: 7
Сила слова: 0

master,
теперь ясно. вполне неплохо. проверю на производительность и может у себя так сделаю.
Записан
Nyaah    ↓ 
12 Январь, 2012, 10:24:14 , спустя 9 часов 34 минуты 22 секунды
НЕ ХУЕТА! ХУЕТА!

Группа: Джедаи

Карма: 34
Сообщений: 521
Сила слова: 6.53

Человек, который конкатенирует/эксплодит аргументы при передаче в функцию, только для того, чтобы узнать как называется переменная, будет тестировать производительность...
Этот мир обречён =)
Записан

Work, buy, consume, die
waff    ↓ 
12 Январь, 2012, 12:40:08 , спустя 2 часа 15 минут 54 секунды
НЕ ХУЕТА! ХУЕТА!

Карма: 0
Сообщений: 7
Сила слова: 0

Nyaah,
не принимайте близко к сердцу. ну да, кое что умею, а вообще учусь, и этому рад =) у вас есть крутое решение данного вопроса? не стесняйтесь, пишите, как я например.
Записан
Nyaah    ↓ 
12 Январь, 2012, 04:35:29 , спустя 3 часа 55 минут 21 секунду
НЕ ХУЕТА! ХУЕТА!

Группа: Джедаи

Карма: 34
Сообщений: 521
Сила слова: 6.53

Сможешь объяснить, зачем тебе это, напишу как сделать. Если это только объединение области видимости контроллера и шаблорна, то мастер тебе уже написал, причем два или три раза уже
Записан

Work, buy, consume, die
Страниц: 1 2 3 [4]
Печать
 

Перейти в:  

Этот топик скрыли: mario