Простая ошибка PHP: синтаксическая ошибка, незаконченное объявление класса

#php #oop #syntax-error

#php #ооп #синтаксическая ошибка

Вопрос:

Я получаю две ошибки, и я не знаю, как это исправить.

Я получаю сообщение об ошибке «синтаксическая ошибка, незаконченное объявление класса» в строке:

 private $language;
  

Я получаю «синтаксическая ошибка, неожиданный ‘public’, ожидающий ‘EOF'» в строке:

 public function getCurrencies()
  

Это весь код:

 class Driver extends Driver{

public static $url = "http://www.com/";
/* The method of posting data to the website */
public static $method = "GET";
/* The part of the url extending the domain name until the search term */
public static $url_searchbase = "search/searchresults.aspx?N=0amp;Ntt=";
/* The part of the url entailing the search term, deifining additional paramters */
public static $url_searchtail = "amp;Ntk=Primaryamp;i=0amp;sw=namp;ps=9999amp;pn=1";
private $currency;
private $language;
/* Allowed currencies */
$currencies = array("USD", "CAD");
/* Allowed languages */
$languages = array("ENU");

function __construct($currency, $language){
    if(setCurrency($currency) AND setLanguage($language)){
        return TRUE;
    } else {
        trigger_error("Currency '". $currency ."' or Language '". $language ."' not supported.", E_USER_ERROR);
        return FALSE;
    }
}

/*
 * Return an array of allowed currencies
 */
public function getCurrencies(){
    return $currencies;
}

/*
 * Set the currency
 */
function setCurrency($currency){
    if(in_array($currency, $this->$currencies)
    {
        $this->$currency = $currency;
        return TRUE;
    } else {
        trigger_error("Currency '". $currency ."' not supported.", E_USER_ERROR);
        return FALSE;
    }
}

/*
 * Return an array of allowed languages
 */
public function getLanguages(){
    return $languages;
}

/*
 * Set the language
 */
public function setLanguage($language){
        if(in_array($language, $this->$languages)
    {
        $this->$language = $language;
        return TRUE;
    } else {
        trigger_error("Language '". $language ."' not supported.", E_USER_ERROR);
        return FALSE;
    }
}

}
  

Комментарии:

1. Какую версию PHP вы используете?

Ответ №1:

class Driver extends Driver не имеет смысла. Я думаю, вы неправильно указали одно из имен.

Кроме того, вы не можете поместить реальный код вне функции.

Переместить

 /* Allowed currencies */
$currencies = array("USD", "CAD");
/* Allowed languages */
$languages = array("ENU");
  

в вашу __construct() функцию и используйте $this->var вместо $var .

В if(in_array($currency, $this->$currencies) отсутствует закрытие ) .

То же самое для if(in_array($language, $this->$languages)

Вы также неправильно обращаетесь к переменным-членам. Вам нужно использовать $this->var вместо $this->$var , который бы обращался к переменной-члену, имя которой хранится в $var .

Комментарии:

1. Комментарий о массиве вне функции также был очень полезен, спасибо за это!

Ответ №2:

У вас было 4 ошибки:

  1. Ваши переменные $currencies и $ languages не имели области видимости. Вам нужно указать, являются ли они общедоступными, частными или защищенными.
  2. Ваш класс расширяет сам себя, это невозможно, я думаю, вам нужно удалить строку extends Driver.
  3. У вас отсутствовали закрывающие скобки в ваших функциях in_array (строки 39 и 60)
  4. Вам не хватало закрывающей фигурной скобки } для вашего класса. РЕДАКТИРОВАТЬ: Это было вызвано при вставке кода в stackoverflow.

Исправлен код:

 <?php
class Driver{

    public static $url = "http://www.com/";
    /* The method of posting data to the website */
    public static $method = "GET";
    /* The part of the url extending the domain name until the search term */
    public static $url_searchbase = "search/searchresults.aspx?N=0amp;Ntt=";
    /* The part of the url entailing the search term, deifining additional paramters */
    public static $url_searchtail = "amp;Ntk=Primaryamp;i=0amp;sw=namp;ps=9999amp;pn=1";
    private $currency;
    private $language;
    /* Allowed currencies */
    public $currencies = array("USD", "CAD");
    /* Allowed languages */
    public $languages = array("ENU");

    function __construct($currency, $language){
        if(setCurrency($currency) AND setLanguage($language)){
            return TRUE;
        } else {
            trigger_error("Currency '". $currency ."' or Language '". $language ."' not supported.", E_USER_ERROR);
            return FALSE;
        }
    }

    /*
     * Return an array of allowed currencies
     */
    public function getCurrencies(){
        return $currencies;
    }

    /*
     * Set the currency
     */
    function setCurrency($currency){
        if(in_array($currency, $this->$currencies))
        {
            $this->$currency = $currency;
            return TRUE;
        } else {
            trigger_error("Currency '". $currency ."' not supported.", E_USER_ERROR);
            return FALSE;
        }
    }

    /*
     * Return an array of allowed languages
     */
    public function getLanguages(){
        return $languages;
    }

    /*
     * Set the language
     */
    public function setLanguage($language){
            if(in_array($language, $this->$languages))
        {
            $this->$language = $language;
            return TRUE;
        } else {
            trigger_error("Language '". $language ."' not supported.", E_USER_ERROR);
            return FALSE;
        }
    }
}
  

Комментарии:

1. Пункт 4 (отсутствует } ) был вызван только при вставке кода в stackoverflow. } Есть, просто не в блоке кода.

2. Ах, спасибо, Мэтт, в этом случае я не проверял источник сообщения. Я оставлю это, чтобы ваш комментарий по-прежнему имел смысл. 🙂

Ответ №3:

 /*
 * Set the currency
 */
function setCurrency($currency){
if(in_array($currency, $this->$currencies)
  

отсутствует закрывающее ) , и то же самое касается setLanguage(..)

Также class Driver extends Driver не имеет никакого смысла и должно быть просто class Driver

Комментарии:

1. Спасибо за вашу помощь, иногда я бываю перегружен, когда снова начинаю кодировать после многих лет отсутствия. У меня есть «класс Driver_Allied расширяет драйвер», расширение собственного класса, конечно, бессмысленно.

Ответ №4:

Есть несколько ошибок:

  1. Вам необходимо использовать private (или один из других параметров видимости) для вашего $currencies и $languages массивов экземпляров класса.

  2. В ваших setCurrency и setLanguage методах отсутствует закрывающая скобка в первой if(in_array( строке.

Кроме того, собираетесь ли вы расширить класс с именем driver классом с именем driver? (Я очень подозреваю, что вы просто хотите использовать class Driver { .)

Комментарии:

1. @Timothy Никаких проблем. Далее и выше. 🙂