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']);