#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 ошибки:
- Ваши переменные $currencies и $ languages не имели области видимости. Вам нужно указать, являются ли они общедоступными, частными или защищенными.
- Ваш класс расширяет сам себя, это невозможно, я думаю, вам нужно удалить строку extends Driver.
- У вас отсутствовали закрывающие скобки в ваших функциях in_array (строки 39 и 60)
- Вам не хватало закрывающей фигурной скобки } для вашего класса. РЕДАКТИРОВАТЬ: Это было вызвано при вставке кода в 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:
Есть несколько ошибок:
-
Вам необходимо использовать
private
(или один из других параметров видимости) для вашего$currencies
и$languages
массивов экземпляров класса. -
В ваших
setCurrency
иsetLanguage
методах отсутствует закрывающая скобка в первойif(in_array(
строке.
Кроме того, собираетесь ли вы расширить класс с именем driver классом с именем driver? (Я очень подозреваю, что вы просто хотите использовать class Driver {
.)
Комментарии:
1. @Timothy Никаких проблем. Далее и выше. 🙂