我无法使用CodeIgniter中的PHPSpreadsheet库创建测试文件。当我运行下面的代码时,我收到错误消息:
遇到未捕获的异常类型:ParseError
消息:语法错误,意外的“使用”(T_USE)
文件名:C:\ wamp64 \ www \ din-din \ application \ controllers \ home.php
行号:17
回溯:
文件:C:\ wamp64 \ www \ din-din \ index.php行:315功能:require_once
你能解释会发生什么吗?
该测试是使用PHP 5.6.35和7.2.4,使用WampServer64 3.1.3和3.1.9版的CodeIgniter进行的!根据{{3}}
中的文档,通过composer安装了PHPSpreadsheet库。谢谢!
代码:
<?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');
}
}
答案 0 :(得分:2)
use
,作为导入或别名命名空间的一种方法,不能在函数范围内使用。引用docs:
必须在文件的最外部作用域(全局作用域)或内部命名空间声明中声明use关键字。这是因为导入是在编译时完成的,而不是在运行时完成的,因此无法进行块作用域的
。
惯例是将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}