|
|
|
| читал мануал и не понял как работает запятая в этой проверке
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile))
|
кстати как вообще это называется когда ставятся всякие закарючки ">"::"+"==" и т д | |
|
|
|
|
|
|
|
для: kvins
(07.03.2011 в 23:56)
| | Эта запятая относится не к оператору if, а к функции move_uploaded_file(), которая принимает два параметра - запятая нужна для их разделения. Мы помещаем следующий вызов функции
move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)
|
в оператор if
| |
|
|
|
|
|
|
|
для: cheops
(08.03.2011 в 00:09)
| | а ну теперь понятно спс =)
получается он присваивает прямо в if проверке, это нормально ?
$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
echo '<pre>';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
echo "Файл корректен и был успешно загружен.\n"; | |
|
|
|
|
|
|
|
для: kvins
(08.03.2011 в 00:27)
| | >а ну теперь понятно спс =)
>получается он присваивает прямо в if проверке, это нормально ?
Да, нормально, это довольно распространенный синтаксис в C-подобных языках программирования. | |
|
|
|
|
|
|
|
для: kvins
(08.03.2011 в 00:27)
| | В выше приведенной проверке ничего никому не присвается, а возвращается результат проверки в виде булевого значения. Хотя присвоить, как вы говорите прямо в проверке, можно:
<?
$k = 5;
$n = 3;
if($m = $k - $n) echo $m;
|
| |
|
|
|
|
|
|
|
для: sim5
(08.03.2011 в 03:36)
| | а это не 1 и тоже ?
move_uploaded_file появляется только внутри if получается что там он как вы говорите
а возвращается результат проверки в виде булевого значения. просто вы название поменяли а смысл тот же вроде, или я чета неправильно понял ?
этот код из мануала
Пример #2 Проверка загружаемых на сервер файлов
http://ru.php.net/manual/ru/features.file-upload.post-method.php
значит там не все написали и надо еще директория прописать куда сохранять?
если да то странно почему этого не написали | |
|
|
|
|
|
|
|
для: kvins
(08.03.2011 в 10:33)
| | Нет не одно и тоже - присвоение значения чему либо, и возвращаемое значение результата сравнения (операции). | |
|
|
|
|
|
|
|
для: sim5
(08.03.2011 в 11:05)
| | Для оператора if одно и тоже, и то и другое возвращает значение, которое можно привести к логическому типу (если = присваивает 0, будет false, если что-то отличное от 0, будет true). | |
|
|
|
|
|
|
|
для: cheops
(08.03.2011 в 11:25)
| | Операции проверки возвращают значение того флага, которое мы попросим. При этом сам результат операции не возвращается, так как мы об этом не просим и иприсваивать нечего. Другое дело если попросить об этом:
if(5 - 3) echo '1'; //возвращено состояние флага zero
if($m = 5 - 3) echo $m; //возвращено 2 как результат операции, затем состояние флага zero, как результат проверки результата операции. | |
|
|
|
|
|
|
|
для: sim5
(08.03.2011 в 11:31)
| | >При этом сам результат операции не возвращается
Результат операции возвращают всегда - на этом построены C-подобные языки. Да помоему и языков, которые работают по другому уже не осталось, так как почти все современные языки на C/C++ пишутся.
>if(5 - 3) echo '1'; //возвращено состояние флага zero
>if($m = 5 - 3) echo $m; //возвращено 2 как результат операции, затем состояние флага zero,
>как результат проверки результата операции.
Не понятно о каком состоянии флага zero, тут речь (первая строка возвращает - 1, вторая - 2)? Оба оператора и = и - вернут значения своей работы, которые будут приведены к логическому типу (в данном случае true). Это же операторы C++ изначально - они всегда возвращают результат своих действий, более того, логика их работы выглядит следующим образом
operator-(5, 3)
operator=($m, operator-(5, 3))
|
Если они значений возвращать не будут - вся арифметика в языке работать перестанет. Это лишь форма записи, а работает она лишь по тому, что перегруженные функции возвращают значения, которые могут передавать друг другу по цепочке - от одной функции operator другой. | |
|
|
|
|
|
|
|
для: cheops
(08.03.2011 в 12:10)
| | Результат результату рознь )
Если в первом случае возвращается флаг результата операции (флаг флагового регистра zero, который всегда будет устнаваливаться/сбрасываться при вычитании, сравнении), то во втором рузультат аккумулятора, а затем флаг проверки результата вычитания.
В первом случае возвращаемое значение просто смысла нет присваивать, хотя возможно и потребуется для логики, во втором мы имеем и результат присвоенный переменной и логику. | |
|
|
|
|
|
|
|
для: sim5
(08.03.2011 в 14:26)
| | как все сложно , я понял вы меня запутать решили =)) | |
|
|
|
|
|
|
|
для: kvins
(08.03.2011 в 14:36)
| | Да что тут путаться, и сложного нет ничего. ) РНР оперирует регистрами процессора, а не сам по себе, и в конечном итоге ваш скрипт будет выполняться командами процессора, его возможностями, а не выдумывать нечто. Во всех операциях проверки вам будет возвращаться одно из двух значений true/false (1/0), тоже самое и при выполнении функций. | |
|
|
|
|
|
|
|
для: sim5
(08.03.2011 в 14:26)
| | Да нет такого. Есть две функции
operator-(5, 3)
operator=($m, operator-(5, 3))
|
которые эквиваленты
и возвращают они одно и то же - числа, эти числа берутся и приводятся к логическому типу. Если вы выполните следующий код, вы в этом сами убедитесь
<?php
echo $m = 5 - 3; // 2
echo "<br />";
echo 5 - 3; // 2
?>
|
>флаг флагового регистра zero, который всегда будет устнаваливаться/сбрасываться при
>вычитании, сравнении), то во втором рузультат аккумулятора
В процессор давайте лезть не будем, там до процессора еще компилятор C++ и интерпретатор PHP, если еще у первого базовые типы не являются объектами, то у второго уж они точно ими являются и их классы перегружают операторы - и = и оба эти оператора возвращают точно такой же объект PHP-переменной, как и любая другая функция PHP будь она встроена или определена пользователем. И эта PHP-переменная в контексте оператора if возвращает 0 или 1, в которые PHP перемалывает любую PHP-переменную. | |
|
|
|
|
|
|
|
для: cheops
(08.03.2011 в 14:54)
| | Ну да, если выполнять этот пример, кто же спорит, но в нет условия. ) | |
|
|
|
|
|
|
|
для: sim5
(08.03.2011 в 15:02)
| | кароче лучше так не делать и все =) легко можно и без этого обойтись | |
|
|
|
|
|
|
|
для: kvins
(08.03.2011 в 15:18)
| | Ну это как посмотреть. Например, перед вами стоит задача сравниения последовательностей чисел вычитанием, и запоминания результата сравнения в виде бинарного набора, но только в том случае, если результатом сравнения будет истина.
Так как результат проверки if(A-B) будет использован интерпретатором для ветвления в вашем коде, а вы в явном виде его не получаете, то вы будете вынуждены писать, например, так:
<?
if($a-$b) $bin = $a-$b;
| И только после этого уже использовать значение переменной $bin как результат сравнения. А можно поступить иначе, присваивать возвращаемый результат, то есть сохранять его:
<?
$a = array(5,3,7,2,6);
$b = array(4,3,4,1,6);
$bin = 0;
for($i=0; $i<count($a); $i++) {
if($ret = $a[$i]-$b[$i]) { //присваиваем (сохраняем) результат проверки, то есть сохраняем его прямо в условии
$bin <<= 1;
$bin |= $ret;
}
}
echo decbin($bin);
| Во втором случае интерпертатор сперва вычтет числа, присвоит результат вычитания переменной $ret, и только лишь затем проверит ваше условие - равна ли $ret истине. Если добавить вывод этого результата, то вы увидите, что будут возвращены 1,3,1. | |
|
|
|