我想将变量值传递给常量值的一部分,以便使用phpspreadsheet在Excel文件中进行格式化。
1)我定义了常量,并使用变量值调用常量值。
use PhpOffice\PhpSpreadsheet\Worksheet as Worksheet;
$value ='PORTRAIT';
define("PORTRAIT", Worksheet\PageSetup::ORIENTATION_PORTRAIT);
define("LANDSCAPE",Worksheet\PageSetup::ORIENTATION_LANDSCAPE);
$orientation_constantvalue=constant($value);
$set_orientation =$sheet->getPageSetup()->setOrientation($orientation_constantvalue);
这个有效。
2)我直接将变量值传递给常量值的一部分。
use PhpOffice\PhpSpreadsheet\Worksheet as Worksheet;
$value ='PORTRAIT';
$orientation_constantvalue="Worksheet\PageSetup::ORIENTATION_{$value}";
$set_orientation =$sheet->getPageSetup()->setOrientation($orientation_constantvalue);
这个没有用。
如果可能的话,我想直接将变量值传递给常量值,这是因为我们可能不需要为常量中的每种可能值类型定义常量
答案 0 :(得分:1)
就像您在第一个示例中所做的那样,您需要通过传递您正在动态计算的名称来使用constant
函数来获取类常量的值。同时,使用类别名,您需要按照此4 years old comment in php documentation的建议修改该调用。
这是我进行的测试。我没有安装您的库,因此我从头开始创建了一些东西作为可重用的最小示例。
我首先使用命名空间类创建了class.php
:
<?php
namespace Toto\Pipo;
class Bingo {
const ORIENTATION_PORTRAIT = "Value for Portrait";
const ORIENTATION_LANDSCAPE = "Value for Lanscape";
}
然后我创建了一个use_class_constant.php
脚本来完成您要实现的目标:
<?php
include('class.php');
use Toto\Pipo\Bingo as Worksheet;
$orientation = 'PORTRAIT';
echo constant(Worksheet::class."::ORIENTATION_{$orientation}") . "\n";
结果如下:
$ php use_class_constant.php
Value for Portrait
如果需要,这是我使用的php版本:
$ php -v
PHP 7.2.17-0ubuntu0.18.04.1 (cli) (built: Apr 18 2019 14:12:38) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.2.17-0ubuntu0.18.04.1, Copyright (c) 1999-2018, by Zend Technologies
答案 1 :(得分:0)
将值传递给常量并将其输出为常量的另一种方法:
$orientation_constantvalue =constant('PhpOffice\PhpSpreadsheet\Worksheet\PageSetup::ORIENTATION_'.$value);
$set_orientation =$sheet->getPageSetup()->setOrientation($orientation_constantvalue);
为此,
不能使用“将PhpOffice \ PhpSpreadsheet \ Worksheet用作工作表;”
并将工作表 \ PageSetup :: ORIENTATION_与$ value串联。
然后,它抛出错误找不到常量。
我们需要编写完整的引用,并将其与常量连接起来
constant('PhpOffice \ PhpSpreadsheet \ Worksheet \ PageSetup :: ORIENTATION _'。$ value);
然后,它起作用。