如何将变量值组合为常量值并输出为常量

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