PHPSpreadsheet & CodeIgniter -> 消息:语法错误,意外 'use' (T_USE)
PHPSpreadsheet & CodeIgniter -> Message: syntax error, unexpected 'use' (T_USE)
我在使用 CodeIgniter 中的 PHP 电子表格库创建测试文件时遇到问题。当我 运行 下面的代码时,我收到错误消息:
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
你能解释一下发生了什么吗?
测试使用PHP5.6.35和7.2.4进行,使用WampServer64 3.1.3和3.1.9版本的CodeIgniter! PHP电子表格库是根据 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
放在defined()
之后,或者class
之后(即在文件底部),但这很不寻常。
两个注意事项:
有一个 use
运算符可以将变量导入 Closure,就像这样 function () use ($var) { ... }
。相同的关键字,但在该词法上下文中它与命名空间无关。
如果您使用的是 PHP 的最新版本,您可以使用名称空间分组来节省一些输入:use PHPOffice\PhpSpreadsheet\{Spreadsheet, Writer\Xlsx}
我在使用 CodeIgniter 中的 PHP 电子表格库创建测试文件时遇到问题。当我 运行 下面的代码时,我收到错误消息:
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
你能解释一下发生了什么吗?
测试使用PHP5.6.35和7.2.4进行,使用WampServer64 3.1.3和3.1.9版本的CodeIgniter! PHP电子表格库是根据 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
放在defined()
之后,或者class
之后(即在文件底部),但这很不寻常。
两个注意事项:
有一个
use
运算符可以将变量导入 Closure,就像这样function () use ($var) { ... }
。相同的关键字,但在该词法上下文中它与命名空间无关。如果您使用的是 PHP 的最新版本,您可以使用名称空间分组来节省一些输入:
use PHPOffice\PhpSpreadsheet\{Spreadsheet, Writer\Xlsx}