如何将变量值组合为常量值并输出为常量
How to combine variable value to constant value and output as constant
我想将变量值传递给常量值的一部分,以便使用 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);
这个没用。
如果可能的话,我想把变量值直接传给常量值,这是因为,我们可能不需要在常量中为每一种可能的值定义常量
另一种通过将值传递给常量并作为常量输出的工作方式:
$orientation_constantvalue =constant('PhpOffice\PhpSpreadsheet\Worksheet\PageSetup::ORIENTATION_'.$value);
$set_orientation =$sheet->getPageSetup()->setOrientation($orientation_constantvalue);
为此,
could not use 'use PhpOffice\PhpSpreadsheet\Worksheet as Worksheet;'
and concatenate Worksheet\PageSetup::ORIENTATION_ with $value.
然后,它抛出找不到常量的错误。
我们需要编写完整的引用并与常量中的变量连接
constant('PhpOffice\PhpSpreadsheet\Worksheet\PageSetup::ORIENTATION_'.$value);
然后,它起作用了。
正如您在第一个示例中所做的那样,您需要通过传递动态计算的名称,使用 constant
函数获取 class 常量的值。同时,使用 class 别名,您需要按照 4 years old comment in php documentation.
中的建议对调用进行一些修改
这是我做的测试。我没有安装你的库,所以我从头开始创建了一些东西作为可重用的最小示例。
我首先使用命名空间 class 创建了 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
我想将变量值传递给常量值的一部分,以便使用 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);
这个没用。
如果可能的话,我想把变量值直接传给常量值,这是因为,我们可能不需要在常量中为每一种可能的值定义常量
另一种通过将值传递给常量并作为常量输出的工作方式:
$orientation_constantvalue =constant('PhpOffice\PhpSpreadsheet\Worksheet\PageSetup::ORIENTATION_'.$value);
$set_orientation =$sheet->getPageSetup()->setOrientation($orientation_constantvalue);
为此,
could not use 'use PhpOffice\PhpSpreadsheet\Worksheet as Worksheet;'
and concatenate Worksheet\PageSetup::ORIENTATION_ with $value.
然后,它抛出找不到常量的错误。
我们需要编写完整的引用并与常量中的变量连接
constant('PhpOffice\PhpSpreadsheet\Worksheet\PageSetup::ORIENTATION_'.$value);
然后,它起作用了。
正如您在第一个示例中所做的那样,您需要通过传递动态计算的名称,使用 constant
函数获取 class 常量的值。同时,使用 class 别名,您需要按照 4 years old comment in php documentation.
这是我做的测试。我没有安装你的库,所以我从头开始创建了一些东西作为可重用的最小示例。
我首先使用命名空间 class 创建了 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