2

私はこのエラーをすべてオンラインで調べましたが、ほとんどの場合、セミコロンがありませんが、不足しているセミコロンが見つかりません。皆さんが私を助けてくれることを望んでいました.

<?php // add_file.php
require 'log.php';
require 'dictionary.php';
function add_file($file = $_FILES["file"], $tags = $_POST["tags"] ){ // Parse error: syntax error, unexpected T_VARIABLE
    $tags = explode(",", $tags);
    if ($file["error"]>0){
        log("add_file", "Error in file: ".$file["error"], "error");
        exit();
    } else {
        $file["deleted"] = false;
        $file["tags"] = $tags;
        $file["id"] = uniqid();
        $file["ext"] = pathinfo($file['name'], PATHINFO_EXTENSION);
        $file["name"] = pathinfo($file['name'], PATHINFO_FILENAME);
        $file["tags"][] = $file["ext"];
        $file["tags"][] = $file["type"];
        $file["tags"][] = explode("/", $file["type"])[0];
        $file["date_created"] = date(DateTime::ATOM);
        if (file_exists("files/" . $file["id"].".".$file['ext'])){
            $file["id"] = uniqid();
            $file["loc"] = "files/" . $file["id"].".".$file['ext'];
            move_uploaded_file($file["tmp_name"], $file["loc"]);
            log("add_file", "Added file at: ".$file["loc"]);
        } else {
            $file["loc"] = "files/" . $file["id"].".".$file['ext'];
            move_uploaded_file($file["tmp_name"], $file["loc"]);
            log("add_file", "Added file at: ".$file["loc"]);
        }
        dict_add("dictionary.json", $file);
    }
}

?>
4

8 に答える 8

3

関数のオプションの引数は定数式でなければなりません:

デフォルト値は、変数、クラス メンバー、関数呼び出しなどではなく、定数式である必要があります。

http://php.net/manual/en/functions.arguments.php#functions.arguments.default

于 2012-12-21T16:40:31.947 に答える
2

関数定義で「動的な」デフォルト値を割り当てることはできません。

$x = 7;
function foo($y = $x) { } // wrong
function foo($y = 7) { } // ok
于 2012-12-21T16:40:23.287 に答える
1

関数のパラメーターに変数を割り当てることはできないと思います

参照: http://php.net/manual/en/functions.arguments.php

于 2012-12-21T16:39:50.713 に答える
1

あなたはこれを行うことはできません

function add_file($file = $_FILES["file"], $tags = $_POST["tags"] )

代わりにこれを行う

function add_file ($file = null, $tags = null) {
    if (is_null($file)) $file = $_FILES["file"];
    if (is_null($tags)) $tags = $_POST["tags"]
    // ...
}

理想的には、関数を呼び出すときにそれらを渡すだけです

add_file($_FILES['file'], $_POST['tags']);
于 2012-12-21T16:41:43.957 に答える
1

PHPドキュメントごと:

デフォルト値は、変数、クラス メンバー、関数呼び出しなどではなく、定数式である必要があります。

これの学術的な理由は、変数が存在するか、特に変更される可能性がある前に、関数定義が登録されるためです。

于 2012-12-21T16:42:34.707 に答える
0
$tags = $_POST["tags"] 

が問題です。デフォルトは定数値としてのみ定義でき、別の変数(スーパーグローバルであっても)を参照することはできません... ただし、array()は受け入れられた例外です

于 2012-12-21T16:41:26.373 に答える
0

これは、PHP で関数にパラメーターを渡す方法ではありません。それはこのように見えるはずです -

function add_file($file, $tags){ 
  // 
}
add_file($_FILES["file"], $_POST["tags"]);

$_FILE関数内で指定する名前は、関数内で変数を参照する方法であり、その関数を呼び出すときに実際の値 ( and内のもの) を渡します$_POST

あなたの構文は、これらのパラメーターのデフォルト値を設定しようとしているように見えます。その場合、変数ではなく実際の値を指定する必要があります。例えば ​​-

function talk($words="Hello World"){
  echo $words;
}

オプションの値を関数に渡すことができるようになりましたtalk()。何を渡しても、同じことがエコーされます。しかし、何も渡さない場合、デフォルトの「Hello World」がエコーされます。

talk("Winter Bash!"); // Output - Winter Bash!
talk(); // Output - Hello World
于 2012-12-21T16:41:30.853 に答える
0

関数パラメーターのデフォルトとして変数を使用することはできません。デフォルト値として定数式 (つまり、評価する必要のないもの) を使用する必要があります。

于 2012-12-21T16:43:10.610 に答える