gpt4 book ai didi

PHPSpreadsheet 和 CodeIgniter -> 消息 : syntax error, 意外 'use' (T_USE)

转载 作者:行者123 更新时间:2023-12-02 20:14:08 43 4
gpt4 key购买 nike

我在使用 CodeIgniter 中的 PHPSpreadsheet 库创建测试文件时遇到问题。当我运行下面的代码时,我收到错误消息:

An uncaught Exception was encountered Type: ParseError

Message: syntax error, unexpected 'use' (T_USE)

Filename: C:\wamp64\www\din-din\application\controllers\home.php

Line Number: 17

Backtrace:

File: C:\wamp64\www\din-din\index.php Line: 315 Function: require_once

你能解释一下发生了什么吗?

测试使用 PHP 5.6.35 和 7.2.4 进行,使用 WampServer64 3.1.3 和 CodeIgniter 版本 3.1.9! PHPSpreadsheet 库是根据https://phpspreadsheet.readthedocs.io/en/develop/中的文档通过composer安装的。

谢谢!

代码:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Home extends CI_Controller {

public function __construct()
{
parent::__construct();
$this->load->helper('form');
}

public function index()
{

require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1', 'Hello World !');

$writer = new Xlsx($spreadsheet);
$writer->save('hello_world.xlsx');
}

}

最佳答案

use 作为导入或别名命名空间的方法,不能在函数作用域内进行。引用docs :

The use keyword must be declared in the outermost scope of a file (the global scope) or inside namespace declarations. This is because the importing is done at compile time and not runtime, so it cannot be block scoped.

惯例是将 use 作为文件中的第一条指令,放在其他任何内容之前:常量声明、函数定义等。您的代码将被重写为:

<?php
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

defined('BASEPATH') OR exit('No direct script access allowed');

class Home extends CI_Controller {
// ...

可以use放在define()之后,或者在class之后(即在文件底部),但这很不寻常。

两个注意事项:

  1. 有一个 use 运算符将变量导入到 Closure 中,就像 function () use ($var) { ... } 一样。相同的关键字,但在该词法上下文中它与命名空间无关。

  2. 如果您使用的是最新版本的 PHP,则可以使用命名空间分组来节省一些输入:use PHPOffice\PhpSpreadsheet\{Spreadsheet, Writer\Xlsx}

关于PHPSpreadsheet 和 CodeIgniter -> 消息 : syntax error, 意外 'use' (T_USE),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52771697/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com