我在网上看到了这个错误,它主要是说你错过了一个分号,但是我找不到任何丢失的分号,我希望你们能帮助我。
<?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);
}
}
?>
答案 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)
我认为您不能将变量分配给函数参数
答案 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)
答案 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)
您不能将变量用作函数参数的默认值。您必须使用常量表达式(即不需要评估的内容)作为默认值。