Неустранимая ошибка: невозможно объявить класс InterdraftFactuursturen, поскольку это имя уже используется в - PullRequest
0 голосов
/ 20 июня 2020

Я кодирую свой первый плагин Wordpress, и мне нужно использовать отдельный класс, который существует в файле fsnl_api.class. php. Но независимо от того, что я делаю, я всегда получаю следующее сообщение об ошибке:

Неустранимая ошибка: не удается объявить класс InterdraftFactuursturen, потому что имя уже используется в

Нет другого класса с таким же name, но когда я обращаюсь к этому файлу, я всегда получаю эту ошибку. Ниже вы увидите фрагмент кода в основном файле. Кто-нибудь может сказать мне, почему это происходит? Я часами ищу решение прямо сейчас, и я в отчаянии и разочаровании.

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

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;
    } 
}

1 Ответ

0 голосов
/ 20 июня 2020

Попробуйте использовать другое имя или пространство имен этого класса. Может быть, где-то в Wordpress этот класс существует.

Я бы порекомендовал вам на будущее, когда вы создаете собственный класс, чтобы всегда было пространство имен Your class. Хорошей практикой является создание пространства имен для ваших собственных классов. https://www.php.net/manual/en/language.namespaces.php

Например, вы можете использовать пространство имен для своего класса (если вы действительно хотите иметь все в одном файле), как показано ниже:

namespace YourPluginName {
    class InterdraftFactuursturen {
        // Code
    }
}

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

Но я бы порекомендовал чтобы сохранить пространство имен вашего класса в другом файле, а затем импортировать с помощью require_once.

Дополнительные сведения см. в официальной документации .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...