|
|
|
| Отношения с функциями рнр у меня перпендикулярные: я не понимаю их, а они не понимают меня. Посвященные функциям страницы Самоучителя рнр залистал до дыр, но толку немного, ибо практика гораздо хитрее приведенных там сведений.
Вот, к примеру, в приведенную ниже функцию нужно извне добавить массив $mass и переменную $lim. И пусть ниже строки внутри фунции выполняется выражение
for ($i=0; $i <= $lim; $i++) echo $mass[$i}, "<br>";
|
Вот как это сделать?
(логического смысла тут не заложено, а исключительно в познавательных целях)
$root = $_SERVER['DOCUMENT_ROOT'];
function find_new($dir)
{
$new_dir = null;
$dir_files = opendir($dir);
while(false !== ($file = readdir($dir_files)))
{
if($file != '.' && $file != '..')
$new_dir[] = $dir."/".$file;
}
if($new_dir)
foreach($new_dir as $check )
{
if(is_file($check))
echo $check."<br>";
elseif(is_dir($check))
find_new($check);
}
}
find_new($root);
|
| |
|
|
|
|
|
|
|
для: Владимир55
(07.01.2009 в 12:02)
| | Передать значения в функцию можно несколькими способами.
1. По ссылке. Это когда Вы делаете так:
2. Объявив её глобальной. Вот так:
<?
function find_new($dir)
{
glob $mass;
|
3. Внутри функций видны константы. Но это уже не переменная. | |
|
|
|
|
|
|
|
для: Николай2357
(07.01.2009 в 12:15)
| | > По ссылке. Это когда Вы делаете так:
Это когда делают так:
<?php
function find_new($dir, &$mass)
?>
|
| |
|
|
|
|
|
|
|
для: BinLaden
(07.01.2009 в 12:18)
| | А что бы добавить две переменные? Так:
function find_new($dir, &$mass, &lim)
|
А как вызывать с тремя переменными? Так?
find_new($root, &$mass, &$lim);
|
| |
|
|
|
|
|
|
|
для: Владимир55
(07.01.2009 в 12:38)
| | По такой схеме просто, без амперсанда
<?
function find_new($dir, $mass, $lim)
|
<?
find_new($root, $mass, $lim);
|
| |
|
|
|
|
|
|
|
для: Николай2357
(07.01.2009 в 13:12)
| | Самое смешное (для меня) состоит в том, что именно так я и делал! И код не работал. Он и сейчас не работает.
В полном виде код можно записать так:
$mass[] = "ABC";
$mass[] = "BCD";
$mass[] = "CDE";
$mass[] = "FFF";
$lim = 2;
$root = $_SERVER['DOCUMENT_ROOT'];
function find_new($dir, $mass, $lim)
{
for ($i=0; $i <= $lim; $i++) echo $mass[$i], "<br>";
$new_dir = null;
$dir_files = opendir($dir);
while(false !== ($file = readdir($dir_files)))
{
if($file != '.' && $file != '..')
$new_dir[] = $dir."/".$file;
}
if($new_dir)
foreach($new_dir as $check )
{
if(is_file($check))
echo $check."<br>";
elseif(is_dir($check))
find_new($check);
}
}
find_new($root, $mass, $lim);
| Выводимая ошибка завит от того, куда я вставляю проверочную строку
for ($i=0; $i <= $lim; $i++) echo $mass[$i], "<br>";
| Если эта строка стои там, где сейчас, или если ее вообще нет, то диагностика такая:
Warning: Missing argument 2 for find_new() in 977.php on line function find_new($dir, $mass, $lim)
Как же справиться с этой функцией? | |
|
|
|
|
|
|
|
для: Владимир55
(07.01.2009 в 14:36)
| | в рекурсивном вызове список параметров тоже надо поправить. | |
|
|
|
|
|
|
|
для: Владимир55
(07.01.2009 в 14:36)
| | Вы лучше скажите, чего Вы из этого скриптика хотите получить? | |
|
|
|
|
|
|
|
для: Николай2357
(07.01.2009 в 15:36)
| | "Вы лучше скажите, чего Вы из этого скриптика хотите получить?"
Как я написал с самого начала, сам по себе мне этот скрипт уже не нужен, ибо всё решено, что с ним было связано. А дело в том, что я никак не могу научиться работать с функциями - ни составлять их сам, ни вносить даже небольшие изменения в написанные кем-то другим.
А хочется разобраться, хотя бы на этом примере.
для Trianon
"в рекурсивном вызове список параметров тоже надо поправить."
Кабы знать, как поправить... | |
|
|
|
|
|
|
|
для: Владимир55
(07.01.2009 в 16:46)
| | В рекурсивном - это значит вызв функции самой себя. Найдите вызов внутри функции и проставьте там те же переменные. | |
|
|
|
|
|
|
|
для: Николай2357
(07.01.2009 в 16:50)
| | А вообще, функция, это довольно просто и чертовски удобно. Работает в теле функции все так же как и везде, а удобство заключается в том, что это ни кому не мешает. Научиться очень просто. Пишите обычный код, а потом вокруг него ставьте
<?
function my_func()
{
// Ваш код
return $result;
}
|
$result - это результат вычислений. Он будет передан переменной (или другой функции), которая вызывает Вашу.
То есть так:
<?
function my_func()
{
$a = "HELO, ";
$b = "World!";
for($i=0; $i < 10; $i++)
$c .= "!";
$result = $a.$b.$c;
return $result;
}
$okak = my_func();
echo $okak;
|
| |
|
|
|
|
|
|
|
для: Николай2357
(07.01.2009 в 16:50)
| | Спасибо, теперь я понял суть дела.
И всё заработало. | |
|
|
|