Php 分析错误:语法错误,函数开头出现意外的T_变量
我在网上看到了这个错误,它主要是说你们缺少了一个分号,但我找不到任何缺少的分号,我希望你们能帮助我Php 分析错误:语法错误,函数开头出现意外的T_变量,php,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
<?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);
}
}
?>
我认为您不能将变量分配给函数参数 请参阅:您不能在函数定义中指定“动态”默认值:
$x = 7;
function foo($y = $x) { } // wrong
function foo($y = 7) { } // ok
函数的可选参数必须是常量表达式: 默认值必须是常量表达式,而不是(例如)常量 变量、类成员或函数调用
这就是问题所在。默认值只能定义为常量值,不能引用其他变量(即使是超全局变量)。。。。虽然array()是一个可接受的异常,但这不是在PHP中向函数传递参数的方式。应该是这样的-
function add_file($file, $tags){
//
}
add_file($_FILES["file"], $_POST["tags"]);
您在函数中给出的名称是如何引用函数中的变量,并在调用该函数时传递实际值(在$\u文件
和$\u POST
中)
您的语法看起来像是在尝试为这些参数设置默认值。在这种情况下,您必须给出一个实际值,而不是一个变量。例如—
function talk($words="Hello World"){
echo $words;
}
现在可以将可选值传递给talk()
函数。无论你经过什么地方,它都会发出同样的声音。但是如果你没有传递任何信息,默认的“helloworld”将会被回应
talk("Winter Bash!"); // Output - Winter Bash!
talk(); // Output - Hello World
你不能这么做
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']);
Per:
默认值必须是常量表达式,而不是(例如)变量、类成员或函数调用
其学术原因是函数定义是在变量可能存在或有机会更改之前注册的。不能将变量用作函数参数的默认值。必须使用常量表达式(即不需要计算的内容)作为默认值
add_file($_FILES['file'], $_POST['tags']);