Фатална грешка не може да се предекларира?

Следният код не работи и дава следната грешка:

Fatal error: Cannot redeclare class shareCount in /customers/8/4/5/WEBSITE.com/httpd.www/wp-content/themes/default/includes/share-count.php on line 2

loop.php (това е от моя цикличен код за публикация)

<?
    require_once("counter/share-count.php");
    $obj = new shareCount(get_permalink());
    echo "Tweets: ".$obj->get_tweets();
    echo "<br>Facebook: ".$obj->get_fb(); 
    echo "<br>Google+: ".$obj->get_plusones();
?>

share-count.php (това е файлът, който е изпълним при поискване)

<?
class shareCount
{
    private $url, $timeout;
    function __construct($url, $timeout = 10)
    {
        $this->url     = rawurlencode($url);
        $this->timeout = $timeout;
    }

    function get_tweets()
    {
        $json_string = $this->file_get_contents_curl('http://urls.api.twitter.com/1/urls/count.json?url=' . $this->url);
        $json        = json_decode($json_string, true);
        return isset($json['count']) ? intval($json['count']) : 0;
    }

    function get_fb()
    {
        $json_string = $this->file_get_contents_curl('http://api.facebook.com/restserver.php?method=links.getStats&format=json&urls=' . $this->url);
        $json        = json_decode($json_string, true);
        return isset($json[0]['total_count']) ? intval($json[0]['total_count']) : 0;
    }

    function get_plusones()
    {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, "https://clients6.google.com/rpc");
        curl_setopt($curl, CURLOPT_POST, true);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_POSTFIELDS, '[{"method":"pos.plusones.get","id":"p","params":{"nolog":true,"id":"' . rawurldecode($this->url) . '","source":"widget","userId":"@viewer","groupId":"@self"},"jsonrpc":"2.0","key":"p","apiVersion":"v1"}]');
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_HTTPHEADER, array(
            'Content-type: application/json'
        ));
        $curl_results = curl_exec($curl);
        curl_close($curl);
        $json = json_decode($curl_results, true);
        return isset($json[0]['result']['metadata']['globalCounts']['count']) ? intval($json[0]['result']['metadata']['globalCounts']['count']) : 0;
    }

    private function file_get_contents_curl($url)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
        curl_setopt($ch, CURLOPT_FAILONERROR, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_TIMEOUT, $this->timeout);
        $cont = curl_exec($ch);
        if (curl_error($ch)) {
            die(curl_error($ch));
        }
        return $cont;
    }
}
?>

person user3348182    schedule 05.08.2014    source източник


Отговори (2)


Не намерих eroor, но можете да преместите оператора require_once извън цикъла. Това може да помогне.

person Michael Wagner    schedule 05.08.2014
comment
Съгласен с @micwag. Проблемът е, че предекларирате класа в цикъла. - person Shawn; 05.08.2014
comment
Можете също да опитате unset($obj); след ехо ‹br›Google[...]; - person Michael Wagner; 05.08.2014
comment
Здравейте, но все още съобщавате за същия проблем, просто няма смисъл, доколкото знам, е правилно :/ - person user3348182; 05.08.2014
comment
Не съм сигурен как да направя това @micwag може ли да ми дадеш пример? - person user3348182; 05.08.2014
comment
Хм. Използвате ли автоматично зареждане? Мисля, че вече е зареден друг клас, използващ същото име, и вие се опитвате да го декларирате отново с първото извикване на require_once. Примерът: ‹? require_once(counter/share-count.php); $obj = new shareCount(get_permalink()); ехо Туитове: .$obj-›get_tweets(); echo ‹br›Facebook: .$obj-›get_fb(); echo ‹br›Google+: .$obj-›get_plusones(); деактивирано ($obj); ?› - person Michael Wagner; 05.08.2014

Може да има друг клас shareCount, който се зарежда автоматично или се зарежда извън това, което сте споделили

Бих отстранил грешки допълнително, като проверя обекта shareCount в ред 1 share-count.php.

Ако не можете да намерите отговора, можете да използвате следния хак, за да си затворите очите за различен основен проблем, като направите следното в share-count.php

<?php 
if (class_exists('shareCount')) {
   return;
}

class shareCount {
....
}
person dminer    schedule 05.08.2014