[英]Use of undefined constant [variable_name] - assumed [variable_.name] error in Php
[英]Use of undefined constant String - assumed 'String' when calling a class name from variable
经过无数的浪费时间,我来寻求帮助,我不能为我的生活找出问题所在。 将非常感谢协助解决这个问题。 任何人都可以识别正在发生的事情或我未能做到的事情。
有问题的代码存在于两个单独的文件中,其中一个文件具有自动加载的Data\\Request
类。 错误是在第302行吐出,这是对同一命名空间,单独文件和单独类的调用,是Data\\ClientKey
。 使用此行的所有类都输出相同的错误。
错误: Notice: Use of undefined constant String - assumed 'String' in data/request.data.php on line 302
代码工作正在调用有问题的类,因为应用程序正在按预期工作,但是我收到了这个错误。 我已经声明strict_types=1
即使删除它也不会使错误消失。
设置类名变量的代码
$NamespaceDataKeys = array('ServerKey', 'ClientKey', 'UserInfo', 'MachineInfo', 'Data');
if( in_array($key, $NamespaceDataKeys) ) {
$NamespaceKey = "Data\\$key";
}else{
$NamespaceKey = $key;
}
第302行:
$sub = new $NamespaceKey(json_encode($value));
我尝试在$value
附近添加双引号,当声明$NamespaceKey
将其设置为String
没有删除错误。
不知道是否相关,但以防万一数组$NamespaceDataKeys
中的所有项都是Request
类中的变量,也是Data
名称空间中的类
Request.data.php
<?php declare(strict_types=1); Namespace Data; class Request implements \\JsonSerializable { Private $Action; Private $Direction; Private $ServerKey; Private $ClientKey; public function __construct($json = false) { if( DEBUG ) echo '[DEBUG] Class: ' . __CLASS__ . ' Method: ' . __METHOD__ . "\\r\\n"; if( $json) { $this -> set($json); //Log the request to the database } } // code removed to keep size small private function set( string $JSONData) { $data = json_decode($JSONData, true); foreach( $data AS $key => $value ) { if( DEBUG ) echo "Key: [$key] "; if( property_exists(__CLASS__,$key) ) { if( is_array($value) ) { if( DEBUG ) echo "Value: [Array]\\r\\n"; $NamespaceDataKeys = array('ServerKey', 'ClientKey', 'UserInfo', 'MachineInfo', 'Data'); if( in_array($key, $NamespaceDataKeys) ) { $NamespaceKey = "\\\\Data\\\\$key"; }else{ $NamespaceKey = $key; } if(count(array_filter(array_keys($value), 'is_string')) > 0 && $key <> "Data") { // assositaive array $sub = new $NamespaceKey(json_encode($value)); $this -> {$key} = $sub; }else{ // numrical array if($this -> ItemType <= 4 ) $key = "Node"; $NamespaceKey = "Data\\\\$key"; for($i=0;$i<=(count($value)-1); $i++) { $sub = $NamespaceKey(json_encode($value[$i])); if($key == 'Node' ) { $this -> Data = (object) $sub; }else{ $this -> {$key}[$i] = (object) $sub; } } } Public Function ClientKey( $Value = "" ) : UUID { if( DEBUG ) echo '[DEBUG] Method: ' . __METHOD__ . "\\r\\n"; if( $Value != "" ) { $UUID = New UUID(); $UUID -> Value = $Value; $this -> ClientKey = (Object) $UUID; #Return (Object) $Value; }else{ if( $this -> ClientKey != Null ) { Return (Object) $this -> ClientKey; } } Return new ClientKey; } #EoF ClientKey ?>
ClientKey.data.php
<?php declare(strict_types=1); Namespace Data; class ClientKey implements \\JsonSerializable { public $Value = String; public function __construct( String $json = 'false') { $this->Value = Null; if( DEBUG ) echo '[DEBUG] Class: ' . __CLASS__ . ' Method: ' . __METHOD__ . "\\r\\n"; if( $json <> 'false' ) { $this -> set($json); } private function set($JSONData) { if( DEBUG ) echo '[DEBUG] Method: ' . __METHOD__ . "\\r\\n"; $data = json_decode($JSONData, true); foreach( $data AS $key => $value ) { if( property_exists(__CLASS__,$key) ) { if( DEBUG ) echo "Key: [$key] "; if( is_array($value) ) { if( DEBUG ) echo "Value: [Array]\\r\\n"; $sub = new $key(json_encode($value)); $this -> {$key} = (object) $sub; }else{ if( DEBUG ) echo "Value: [$value]\\r\\n"; $this -> {$key} = $value; } } } } # EoF Set Public Function jsonSerialize($pretty = false) { if( $pretty ) { return json_encode(get_object_vars($this), JSON_PRETTY_PRINT); }else{ return json_encode(get_object_vars($this)); } } } # EoF Class ?>
应用程序调试:此调试输出来自应用程序本身。 它显示以下内容:
Request.Data.php
传递了带有ClientKey
键的JSON
字符串 Data\\ClientKey::__Construct
方法Data\\ClientKey::__Construct
Value
类的Data\\ClientKey::Value
_ 我想要实现的没有错误的简单方法是将JSON数据序列化/反序列化为cclass。 我正在与E_NOTICE
Key: [ClientKey] Value: [Array] [DEBUG] Autoload Method: {closure}-Class Name: Data\\ClientKey [DEBUG] Autoload path: data/ClientKey.data.php <br /> <b>Warning</b>: Use of undefined constant String - assumed 'String' (this will throw an Error in a future version of PHP) in <b>/var/www/html/data/Request.data.php</b> on line <b>302</b><br /> [DEBUG] Class: Data\\ClientKey Method: Data\\ClientKey::__construct [DEBUG] Method: Data\\ClientKey::set Key: [Value] Value: [D49AD5645F8310896545C0D3354ECC0A]
应用程序流:将JSON数据反序列化为类Request.data.php
。 Client.Data.php
是Request.data.php
的子类型,此应用程序所在的阶段是“deSerialize”阶段
找到解决方案, Data\\ClientKey
的属性$Value
被错误地设置为String
,删除它并且错误消失了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.