gpt4 book ai didi

php - 使用未定义的常量字符串 - 从变量调用类名时假定为 'String'

转载 作者:行者123 更新时间:2023-12-04 17:06:17 26 4
gpt4 key购买 nike

在无数次浪费时间之后,我来寻求帮助,我一生都无法弄清楚问题是什么。将不胜感激帮助解决此问题。任何人都可以确定正在发生的事情或我没有做的事情。

有问题的代码驻留在两个单独的文件中,一个文件是 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 中的类命名空间

编辑以添加相关类

请求数据文件

<?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

?>

客户端 key .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已通过 JSON键为 ClientKey 的字符串
  • 自动加载的 ClientKey.Data.php,
  • E_NOTICE 警告输出
  • 运行方法 Data\ClientKey::__Construct
  • 设置属性,Value类(class)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.phpRequest.data.php 的子类型这个应用程序所在的阶段是“deSerialize”阶段

    最佳答案

    解决方法找到了,属性$ValueData\ClientKey被错误地设置为 String , 删除了这个,错误就消失了。

    关于php - 使用未定义的常量字符串 - 从变量调用类名时假定为 'String',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56304907/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com