解析错误:语法错误,函数启动时出现意外的T_VARIABLE

时间:2012-12-21 16:38:04

标签: php

我在网上看到了这个错误,它主要是说你错过了一个分号,但是我找不到任何丢失的分号,我希望你们能帮助我。

<?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);
    }
}

?>

8 个答案:

答案 0 :(得分:2)

您无法在函数定义中指定“动态”默认值:

$x = 7;
function foo($y = $x) { } // wrong
function foo($y = 7) { } // ok

答案 1 :(得分:2)

函数的可选参数必须是常量表达式:

  

默认值必须是常量表达式,而不是(例如)a   变量,类成员或函数调用。

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

答案 2 :(得分:1)

我认为您不能将变量分配给函数参数

请参阅:http://php.net/manual/en/functions.arguments.php

答案 3 :(得分: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']);

答案 4 :(得分:1)

PHP Documentation

  

默认值必须是常量表达式,而不是(例如)变量,类成员或函数调用。

学术上的原因是函数定义在变量甚至可能存在之前就已经注册,或者特别是有机会改变。

答案 5 :(得分:0)

$tags = $_POST["tags"] 

是个问题。默认值只能定义为常量值,不能引用另一个变量(甚至是超全局)....尽管array()是一个可接受的异常

答案 6 :(得分:0)

这不是如何将参数传递给PHP中的函数。它看起来应该是这样的 -

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

您在函数中提供的名称是如何引用函数中的变量,并在调用该函数时传递实际值($_FILE$_POST中的内容)。

您的语法有点像是在尝试为这些参数设置默认值。在这种情况下,您必须提供实际值而不是变量。例如 -

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

您现在可以将可选值传递给talk()函数。无论你通过什么,它都会回应同样的事情。但如果你没有传递任何东西 - 默认的“Hello World”将被回应。

talk("Winter Bash!"); // Output - Winter Bash!
talk(); // Output - Hello World

答案 7 :(得分:0)

您不能将变量用作函数参数的默认值。您必须使用常量表达式(即不需要评估的内容)作为默认值。