【问题标题】:Fatal error: Cannot declare class InterdraftFactuursturen, because the name is already in use in致命错误:无法声明类 InterdraftFactuursturen,因为该名称已在
【发布时间】:2020-10-10 21:41:20
【问题描述】:

我正在编写我的第一个 Wordpress 插件,我需要使用 fsnl_api.class.php 文件中存在的一个单独的类。但无论我做什么,我总是会收到以下错误消息:

致命错误:无法声明类 InterdraftFactuursturen,因为该名称已在使用中

没有其他同名的类,但是当我引用该文件时,我总是得到那个错误。下面你会在主文件中看到一些代码。谁能告诉我为什么会这样?我现在正在寻找几个小时来寻找解决方案,但我感到绝望和沮丧。

require_once('fsnl_api.class.php');

if (!function_exists('add_action')) {
    echo "You can't access this file!";
    exit;
}

class InterdraftFactuursturen {
    function __construct() {
        add_action('init', array($this, 'custom_post_type'));
    }

// some functions
}

if (class_exists('InterdraftFactuursturen')) {
    $interdraftFactuursturen = new InterdraftFactuursturen();
}

register_activation_hook( __FILE__, array($interdraftFactuursturen, 'activate') );

register_deactivation_hook( __FILE__, array($interdraftFactuursturen, 'deactivate') );

fsnl_api.class.php 类

class fsnl_api
{
    protected $url;
    protected $verb;
    protected $requestBody;
    protected $requestLength;
    protected $username;
    protected $password;
    protected $acceptType;
    protected $responseBody;
    protected $responseInfo;
    
    public function __construct ($url = null, $verb = 'GET', $requestBody = null)
    {
        $this->url              = $url;
        $this->verb             = $verb;
        $this->requestBody      = $requestBody;
        $this->requestLength    = 0;
        $this->username         = null;
        $this->password         = null;
        $this->acceptType       = 'application/json';
        $this->responseBody     = null;
        $this->responseInfo     = null;
        
        if ($this->requestBody !== null)
        {
            $this->buildPostBody();
        }
    }
    
    public function flush ()
    {
        $this->requestBody      = null;
        $this->requestLength    = 0;
        $this->verb             = 'GET';
        $this->responseBody     = null;
        $this->responseInfo     = null;
    }
    
    public function execute ()
    {
        $ch = curl_init();
        $this->setAuth($ch);
        
        try
        {
            switch (strtoupper($this->verb))
            {
                case 'GET':
                    $this->executeGet($ch);
                    break;
                case 'POST':
                    $this->executePost($ch);
                    break;
                case 'PUT':
                    $this->executePut($ch);
                    break;
                case 'DELETE':
                    $this->executeDelete($ch);
                    break;
                default:
                    throw new InvalidArgumentException('Current verb (' . $this->verb . ') is an invalid REST verb.');
            }
        }
        catch (InvalidArgumentException $e)
        {
            curl_close($ch);
            throw $e;
        }
        catch (Exception $e)
        {
            curl_close($ch);
            throw $e;
        }
        
    }
    
    public function buildPostBody ($data = null)
    {
        $data = ($data !== null) ? $data : $this->requestBody;
        
        if (!is_array($data))
        {
            throw new InvalidArgumentException('Invalid data input for postBody.  Array expected');
        }
        
        $data = http_build_query($data, '', '&');
        $this->requestBody = $data;
    }
    
    protected function executeGet ($ch)
    {       
        $this->doExecute($ch);  
    }
    
    protected function executePost ($ch)
    {
        if (!is_string($this->requestBody))
        {
            $this->buildPostBody();
        }
        
        curl_setopt($ch, CURLOPT_POSTFIELDS, $this->requestBody);
        curl_setopt($ch, CURLOPT_POST, 1);
        
        $this->doExecute($ch);  
    }
    
    protected function executePut ($ch)
    {
        if (!is_string($this->requestBody))
        {
            $this->buildPostBody();
        }
        
        $this->requestLength = strlen($this->requestBody);

        $fh = fopen('php://memory', 'rw');
        fwrite($fh, $this->requestBody);
        rewind($fh);
        
        curl_setopt($ch, CURLOPT_INFILE, $fh);
        curl_setopt($ch, CURLOPT_INFILESIZE, $this->requestLength);
        curl_setopt($ch, CURLOPT_PUT, true);

        $this->doExecute($ch);
        
        fclose($fh);
    }
    
    protected function executeDelete ($ch)
    {
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
        
        $this->doExecute($ch);
    }
    
    protected function doExecute (&$curlHandle)
    {
        $this->setCurlOpts($curlHandle);
        $this->responseBody = curl_exec($curlHandle);
        $this->responseInfo = curl_getinfo($curlHandle);
        
        curl_close($curlHandle);
    }
    
    protected function setCurlOpts (&$curlHandle)
    {
        curl_setopt($curlHandle, CURLOPT_TIMEOUT, 10);
        curl_setopt($curlHandle, CURLOPT_URL, $this->url);
        curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curlHandle, CURLOPT_HTTPHEADER, array ('Accept: ' . $this->acceptType));
    }
    
    protected function setAuth (&$curlHandle)
    {
        if ($this->username !== null && $this->password !== null)
        {
            curl_setopt($curlHandle, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
            curl_setopt($curlHandle, CURLOPT_USERPWD, $this->username . ':' . $this->password);
        }
    }
    
    public function getAcceptType ()
    {
        return $this->acceptType;
    } 
    
    public function setAcceptType ($acceptType)
    {
        $this->acceptType = $acceptType;
    } 
    
    public function getPassword ()
    {
        return $this->password;
    } 
    
    public function setPassword ($password)
    {
        $this->password = $password;
    } 
    
    public function getResponseBody ()
    {
        return $this->responseBody;
    } 
    
    public function getResponseInfo ()
    {
        return $this->responseInfo;
    } 
    
    public function getUrl ()
    {
        return $this->url;
    } 
    
    public function setUrl ($url)
    {
        $this->url = $url;
    } 
    
    public function getUsername ()
    {
        return $this->username;
    } 
    
    public function setUsername ($username)
    {
        $this->username = $username;
    } 
    
    public function getVerb ()
    {
        return $this->verb;
    } 
    
    public function setVerb ($verb)
    {
        $this->verb = $verb;
    } 
}

【问题讨论】:

  • 请分享您的 fsnl_api.class.php 文件的内容,以便 wr 看看。
  • 这不是我的课程,但我已将其添加到我的帖子中

标签: php wordpress class plugins


【解决方案1】:

尝试使用不同的名称或命名空间这个类。 可能在 Wordpress 的某个地方存在这个类。

我会推荐你​​将来,当你创建自己的类来始终命名你的类时。为您自己的类命名是一个好习惯。 https://www.php.net/manual/en/language.namespaces.php

例如,您可以为您的类命名(如果您真的想将所有内容放在一个文件中),如下所示:

namespace YourPluginName {
    class InterdraftFactuursturen {
        // Code
    }
}

namespace {
        $interdraftFactuursturen = new YourPluginName\InterdraftFactuursturen();   
}

但我建议将您的类命名空间存储在其他文件中,然后使用 require_once 导入。

查看official documentation 了解更多信息。

【讨论】:

  • 我都做了,但我仍然不断收到错误。但感谢您提供有关命名空间的信息,很高兴知道。
  • 尝试只删除 _construct 中 InterdraftFactuursturen 中的 add_action。并检查这是否发生了变化
猜你喜欢
  • 2016-11-03
  • 2020-03-20
  • 2023-03-10
  • 2019-12-25
  • 2019-04-15
  • 1970-01-01
  • 2019-08-23
  • 1970-01-01
  • 2021-08-17
相关资源
最近更新 更多