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

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

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

private $language;

Я получаю «синтаксическую ошибку, неожиданная «общедоступность», ожидание «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=0&Ntt=";
/* The part of the url entailing the search term, deifining additional paramters */
public static $url_searchtail = "&Ntk=Primary&i=0&sw=n&ps=9999&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;
    }
}

}

person Dominik    schedule 08.05.2011    source источник
comment
Какую версию PHP вы используете?   -  person Matthew    schedule 08.05.2011


Ответы (4)


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.

person ThiefMaster    schedule 08.05.2011
comment
Большое спасибо за Вашу помощь! - person Dominik; 08.05.2011
comment
Комментарий о массиве вне функции также был очень полезен, спасибо за это! - person Dominik; 08.05.2011

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

  1. Ваши переменные $currencies и $languages ​​не имели области видимости. Вам нужно объявить, являются ли они общедоступными, частными или защищенными.
  2. Ваш класс расширяет себя, это невозможно, я думаю, вам нужно удалить строку extensions Driver.
  3. У вас отсутствовали закрывающие скобки в ваших функциях in_array (строки 39 и 60)
  4. Вам не хватило закрывающей скобки } для вашего класса. EDIT: Это было вызвано вставкой кода в 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=0&Ntt=";
    /* The part of the url entailing the search term, deifining additional paramters */
    public static $url_searchtail = "&Ntk=Primary&i=0&sw=n&ps=9999&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;
        }
    }
}
person Gazler    schedule 08.05.2011
comment
Пункт 4 (отсутствующий }) был вызван только при вставке кода в stackoverflow. } есть, просто не в блоке кода. - person Matthew; 08.05.2011
comment
Ааа, спасибо, Мэтт, в данном случае я не проверял источник сообщения. Я оставлю это, так что ваш комментарий все еще имеет смысл. :) - person Gazler; 08.05.2011

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

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

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

person Matthew    schedule 08.05.2011
comment
Спасибо за вашу помощь, иногда я ошеломлен, когда снова начинаю программировать после многих лет отсутствия. У меня класс Driver_Allied расширяет Driver, расширять собственный класс конечно нонсенс. - person Dominik; 08.05.2011

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

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

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

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

person John Parker    schedule 08.05.2011
comment
@ Тимоти Нет проблем. Вперед и вверх. :-) - person John Parker; 08.05.2011