Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.85/41: Рейтинг темы: голосов - 41, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 14.07.2012
Сообщений: 46

Ошибка unexpected '.', expecting ',' or ';'

19.08.2012, 15:37. Показов 8970. Ответов 40
Метки нет (Все метки)

Здравствуйте!
Уже полдня бьюсь с этой проблемой, надеюсь на помощь.
Описание:
Попытка вызова:
PHP
1
2
3
4
5
<?
require_once('d:\Domains\web-ing.16mb.com.lh\classes\Obr_sv.php');
$os= new Obr_sv;
print $os->message;
?>
Сам класс:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Obr_sv {
    // Скрипт для формы обратной связи
    var $name;
    var $email; // мыло адресата
    var $ms;
    
    var $to; // мыло отправителя
    var $subject = "Без темы";
var $message= 'Имя: ' . $this->name . '\nEmail: ' . $this->email . '\nТема: ' . $this->subject . '\nСообщение: ' . $this->ms; // Строка, выдающая ошибку
    var $headers  = "Content-type: text/plain; charset=utf-8 \r\n" . "From: $this->email \r\n";
    
   function mailto()
   {    if (!$this->name || !$this->email || !$this->to || !$this->ms) echo "<font color=red>Пожалуйста, заполните все обязятельные поля.</font><br /><br />"; // проверка заполнены ли все обезятельные поля для отправки сообщения + вывод ошибки.
        else { mail($this->to, $this->subject, $this->message, $this->headers); echo $this->name.', Ваша заявка успешно отправлена. Мы свяжемся с Вами в ближайшее время. <br /><br />'; }
   }
}
Результат:
Parse error: syntax error, unexpected '.', expecting ',' or ';' in D:\Domains\web-ing.16mb.com.lh\classes\Obr_sv.php on line 10
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.08.2012, 15:37
Ответы с готовыми решениями:

Ошибка unexpected T_VARIABLE, expecting T_FUNCTION
Привет всем, помогите с opencart, создал модуль, но выдаёт ошибку: Parse error: syntax error, unexpected T_VARIABLE, expecting T_FUNCTION...

Ошибка "Parse error: syntax error, unexpected '{', expecting '(' in"
имеется класс safemysql.class.php Хочу заточить его под нужды своего сайта с помощью наследования//подключаю исходный класс //в нем уже...

Parse error: syntax error, unexpected T_VARIABLE, expecting T_FUNCTION
&lt;?php class Test{ public $serik=&quot;Сека молодец&quot;; function test1(){ echo $this-&gt;serik; }

40
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
20.08.2012, 10:35
Цитата Сообщение от KorniloFF Посмотреть сообщение
Да и зачем объявлять пустые переменные в конструкторе, чтобы их переназначать потом?
затем, что если я не подам все их - то выдаст ошибку:
если я вызову его не со всеми параметрами - выдаст ошибку что необходимо больше аргументов, чем подали в конструктор
PHP
1
2
3
4
5
6
class foo {
...
function __construct($f,$s,$t) { .... }
...
}
$bar = new foo('first','second'); //Ошибка! Missing argument N for foo::__construct()
0
0 / 0 / 0
Регистрация: 14.07.2012
Сообщений: 46
20.08.2012, 10:39  [ТС]
Должен же быть прямой путь назначения дефолтных значений переменным класса, которые перейдут в объект?

Добавлено через 4 минуты
А можно вызвать метод класса из самого класса?
То есть сделать метод, инициализирующий дефолтные значения переменных, и вызвать его изнутри, чтобы не тащить этот вызов в объект?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
20.08.2012, 10:42
конечно. я вам даже в примере это писал. можно либо через
PHP
1
2
$this->foo();//либо
self::foo();
Добавлено через 28 секунд
разница в том как они будут вызываться - первая вызывается от текущего объекта, а вторая от класса
0
0 / 0 / 0
Регистрация: 14.07.2012
Сообщений: 46
20.08.2012, 10:48  [ТС]
Как-то так:
PHP
1
2
3
4
5
6
7
class foo {
var $f; var $s; var $t; 
function init() {$this->f= "f"; $this->s= "s"; $this->t= "t"; }
...
}
$bar = new foo;
$bar->s= "ss";
Вопрос: как вызвать метод init()?

Добавлено через 2 минуты
Цитата Сообщение от KOPOJI Посмотреть сообщение
конечно. я вам даже в примере это писал. можно либо через
Пропустил, значит, прошу прощения.
То есть, получается так:
PHP
1
2
3
4
5
6
7
8
class foo {
var $f; var $s; var $t; 
function init() {$this->f= "f"; $this->s= "s"; $this->t= "t"; }
$this->init();
...
}
$bar = new foo;
$bar->s= "ss";
Добавлено через 2 минуты
Цитата Сообщение от KOPOJI Посмотреть сообщение
self::foo();
Эта запись мне пока не знакома, даже не могу понять пока что она делает. Впрочем, поищу описание работы этой конструкции, вы и так мне очень помогли. Спасибо.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
20.08.2012, 10:54
это позволяет обращаться к свойствам и методам класса без создания объекта
PHP
1
2
3
4
5
6
7
8
9
class foo {
public static function bar () {
self::fooBar();
}
private function fooBar() {
echo 'Hello';
}
}
foo::bar();
если заменить self:: на $this-> то выдаст ошибку что невозможно использовать $this когда объект не создан. Указатель $this - это указатель на текущий объект, self - на текущий класс, parent - на родительский (базовый) класс
2
0 / 0 / 0
Регистрация: 14.07.2012
Сообщений: 46
20.08.2012, 11:04  [ТС]
Спасибо, очень доходчиво.
Значит, я правильно вызываю метод внутри класса:
PHP
1
2
3
4
5
6
7
8
class foo {
var $f; var $s; var $t; 
function init() {$this->f= "f"; $this->s= "s"; $this->t= "t"; }
$this->init();
...
}
$bar = new foo;
$bar->s= "ss";
============================
Нет, не правильно, начинаю понимать... =)
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
20.08.2012, 11:08
неа, неправильно.. вызывать надо внутри другого метода, а вы вызываете его.. нигде
P.S. var - устаревшее ключевое слово, используйте вместо него public
0
0 / 0 / 0
Регистрация: 14.07.2012
Сообщений: 46
20.08.2012, 11:11  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
неа, неправильно.. вызывать надо внутри другого метода, а вы вызываете его.. нигде
Да, я уже понял и поправился в предыдущем посту =)

Цитата Сообщение от KOPOJI Посмотреть сообщение
P.S. var - устаревшее ключевое слово, используйте вместо него pulbic
Видать те учебники, что я изучаю, уже устарели. Вообще, сумбур пока в голове от версий, от синтаксиса...
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
20.08.2012, 11:18
http://www.php.net/oop

Добавлено через 3 минуты
FAQ: Объектно-ориентированное программирование на PHP
0
0 / 0 / 0
Регистрация: 14.07.2012
Сообщений: 46
20.08.2012, 11:22  [ТС]
KOPOJI, весьма признателен!
0
weboman
 Аватар для Schtrich
210 / 195 / 63
Регистрация: 13.08.2010
Сообщений: 1,531
Записей в блоге: 6
20.08.2012, 13:14
я тогда var написал чтобы автора не спутать, в итоге сам запутался, с этими версиями php уже...

А так постараюсь немного объяснить ТС где Солнце светит (ООП?)

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class BaseClass {
 
    public $name;      // эту переменную можно использовать где угодно и как угодна, так как она public (публична)
    
    private $age = 20; // переменная $age будет доступна только внутри класса BaseClass
    
    /* protected означает что переменная $surname может быть использована 
     * только внутри класса BaseClass и его потомках, использование ее вне класса приведет к ошибке
     * как видишь ей сразу задано значение (что и есть значение по умолчанию)
     */
    protected $surname = "Ivanov"; 
    
    static public $ticket = true; // статическая переменная $ticket
 
    // конструктор объекта (в пхп выше 5 теперь это делается так)
    function __construct($n) {
    
        $this->name = $n;
        
    }
    
    public function email()
    {
        
        /* тут важно запомнить что статические переменные вызываются со знаком доллара, 
         * а не статические без
         */
        echo self::$ticket; // статическая переменная (выведет 1, так как true = 1)
        echo $this->name; // обычная переменная класса (скорее лучше это называть 'полем')
    
    }
    
}
 
$test = new BaseClass("KorniloFF");
 
$test->email();
Добавлено через 1 минуту
нда, пока писал вам уже ресурсов накидали, надеюсь что все равно пригодится.
1
20.08.2012, 13:42

Не по теме:

Цитата Сообщение от Schtrich Посмотреть сообщение
скорее лучше это называть 'полем'
сразу видно что человек после других языков пришел на php :D
По сути, невиртуальные свойства – это вовсе не «свойства» класса, а «поля». Свойством же, как раз,
называется поле, определенное не в виде переменной, но в виде геттера и/или сеттера. Это в языках с нормальной
реализацией ООП. В PHP любое поле класса называется свойством. А виртуальные свойства входят в понятие
перегрузки свойств

0
20.08.2012, 13:56

Не по теме:

именно, а я стоял перед выбором когда печатал назвать свойством или полем, : ) поле перевесило, видимо дей-но другие языки повлияли.

0
0 / 0 / 0
Регистрация: 14.07.2012
Сообщений: 46
20.08.2012, 18:44  [ТС]
Schtrich, спасибо, не все понятно пока, но что как понял, написал в комментах после ???
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?
class BaseClass {
 
    public $name;      // эту переменную можно использовать где угодно и как угодна, так как она public (публична)
    // ??? то есть, ее можно вызвать как $b= new BaseClass; $b->name 
    
    private $age = 20; // переменная $age будет доступна только внутри класса BaseClass
    // ??? то есть, доступна из любого его метода через $this->age 
    
    /* protected означает что переменная $surname может быть использована 
     * только внутри класса BaseClass и его потомках, использование ее вне класса приведет к ошибке
     * как видишь ей сразу задано значение (что и есть значение по умолчанию)
     */
    protected $surname = "Ivanov"; // ??? Доступна из любого подкласса?
    
    static public $ticket = true; // статическая переменная $ticket
    // ???
 
    // конструктор объекта (в пхп выше 5 теперь это делается так)
    // ??? Понятно
    function __construct($n) {
    
        $this->name = $n;
        
    }
    
    public function email()
    {
        
        /* тут важно запомнить что статические переменные вызываются со знаком доллара, 
         * а не статические без
         */
        echo self::$ticket; // статическая переменная (выведет 1, так как true = 1)
        echo $this->name; // обычная переменная класса (скорее лучше это называть 'полем')
    
    }
    
}
0
weboman
 Аватар для Schtrich
210 / 195 / 63
Регистрация: 13.08.2010
Сообщений: 1,531
Записей в блоге: 6
20.08.2012, 19:25
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
class BaseClass {
 
    public $name;      // эту переменную можно использовать где угодно и как угодна, так как она public (публична)
    // ??? то есть, ее можно вызвать как $b= new BaseClass; $b->name 
    # вызывать то так, но класс объявлять луче со скобками $b = new BaseClass();
    
    private $age = 20; // переменная $age будет доступна только внутри класса BaseClass
    // ??? то есть, доступна из любого его метода через $this->age 
    # именно
    
    /* protected означает что переменная $surname может быть использована 
     * только внутри класса BaseClass и его потомках, использование ее вне класса приведет к ошибке
     * как видишь ей сразу задано значение (что и есть значение по умолчанию)
     */
    protected $surname = "Ivanov"; // ??? Доступна из любого подкласса?
    # именно
    
    static public $ticket = true; // статическая переменная $ticket
    // ???
    # модификатор static , я написал же см. ^ 
    #  
    # вообще области видимости ( public, private, protected ) , так же как и модификатор static 
    # так же само применяются к методам (функциям) класса, напр.
    static public function foo()
    {
 
        echo $this->age;
        
     }
 
    // конструктор объекта (в пхп выше 5 теперь это делается так)
    // ??? Понятно
    function __construct($n) {
    
        $this->name = $n;
        
    }
    
    public function email()
    {
        
        /* тут важно запомнить что статические переменные вызываются со знаком доллара, 
         * а не статические без
         */
        echo self::$ticket; // статическая переменная (выведет 1, так как true = 1)
        echo $this->name; // обычная переменная класса (скорее лучше это называть 'полем')
        
        // вызовем статический метод foo();
        self::foo();
    
    }
    
}
Вообще чтобы окончательно во всем этом разобраться книжечку в зубы и вперед! На форуме в самом начале раздела по моему дается хороший список книг, которые можно почитать.

Добавлено через 15 минут
кстати, если протестить, то может возникнуть ошибка:

Code
1
Fatal error: Using $this when not in object context in
Форумчане, объясните почему так происходит.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
20.08.2012, 22:03
Цитата Сообщение от Schtrich Посмотреть сообщение
кстати, если протестить, то может возникнуть ошибка:
https://www.cyberforum.ru/post3373830.html

Добавлено через 1 минуту
ты же объект еще не создал, а уже пытаешься вызывать методы этого объекта, а не класса
0
0 / 0 / 0
Регистрация: 14.07.2012
Сообщений: 46
21.08.2012, 12:14  [ТС]
Цитата Сообщение от Schtrich Посмотреть сообщение
# вызывать то так, но класс объявлять луче со скобками $b = new BaseClass();
Таким образом, насколько я понимаю, идет непосредственное обращение к конструктору, и оно имеет смысл лишь при необходимости назначения его переменной, т.е.
PHP
1
$b = new BaseClass('var n');
Цитата Сообщение от Schtrich Посмотреть сообщение
# модификатор static , я написал же см. ^
Не понял

Цитата Сообщение от Schtrich Посмотреть сообщение
self::foo();
Тут и есть ошибка, как объяснил выше KOPOJI, использование this, происходящее в методе foo, без создания объекта, это я уже понял =)

Добавлено через 6 минут
PHP
1
2
3
4
5
6
7
8
9
class foo {
public static function bar () {
self::fooBar();
}
private function fooBar() {
echo 'Hello';
}
}
foo::bar();
думаю, можно заменить конструкцией
PHP
1
2
3
4
5
6
7
class foo {
 
public function fooBar() {
echo 'Hello';
}
}
foo::foobar();
Так ли это? Правильно ли я понял?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
21.08.2012, 12:25
Цитата Сообщение от KorniloFF Посмотреть сообщение
идет непосредственное обращение к конструктору, и оно имеет смысл лишь при необходимости назначения его переменной, т.е.
при создании объекта конструктор в любом случае вызывается. вопрос только в том, описан он вами или нет..
Цитата Сообщение от KorniloFF Посмотреть сообщение
думаю, можно заменить конструкцией
да, можно.. просто вообще обычно оператор :: используется для доступа к статичным свойствам и методам и константам..
или к родительским..
1
0 / 0 / 0
Регистрация: 14.07.2012
Сообщений: 46
21.08.2012, 12:36  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
при создании объекта конструктор в любом случае вызывается. вопрос только в том, описан он вами или нет..
Это понятно, вопрос был в том, что имеет ли запись со скобками предпочтение к той же, но без скобок, при отсутствии необходимости назначения переменной(ых) конструктору? Я нигде такого предпочтения не встречал...

Добавлено через 5 минут
Цитата Сообщение от KOPOJI Посмотреть сообщение
просто вообще обычно оператор :: используется для доступа к статичным свойствам и методам и константам..
Тут тоже могут быть разночтения. Ведь вы обращаетесь к публичному методу класса, в котором, в свою очередь осуществляется обращение к приватному методу fooBar(), из чего можно сделать вывод, что непосредственное обращение к нему извне все же невозможно...
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
21.08.2012, 12:42
Цитата Сообщение от KorniloFF Посмотреть сообщение
что имеет ли запись со скобками предпочтение к той же
как на мой взгляд - идентично. все равно в обоих случаях пустой конструктор..
Цитата Сообщение от KorniloFF Посмотреть сообщение
из чего можно сделать вывод, что непосредственное обращение к нему извне все же невозможно...
естественно, невозможно, он же закрытый
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.08.2012, 12:42

Изучаю ООП и возникают ошибки "unexpected '(', expecting ',' or ';'"
Здравствуйте, я изучаю ООП и практикуя возникают вопросы не подвласные моему разуму, пока ) Надеюсь тут найдется добрые люди, кто направить...

Второй день бьюсь над ошибкой "Parse error: syntax error, unexpected '(', expecting ',' or ';' "
Ошибка: Parse error: syntax error, unexpected '(', expecting ',' or ';' in D:\........\mail.php on line 5 В этом файле: &lt;?php ...

Ошибка Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
Помогите пожалуйста! &lt;?php if (!isset($myrow) or $myrow=='') { print &lt;&lt;&lt;HERE ...

ошибка Parse error: syntax error, unexpected 'function_toString' (T_STRING), expecting variable (T_VARIABLE)
Parse error: syntax error, unexpected 'function_toString' (T_STRING), expecting variable (T_VARIABLE) in...

Parse error: syntax error, unexpected 'text' (T_STRING), expecting ']'
Всем доброго дня! Пожалуйста помогите новичку: Столкнулся с проблемой в написании блога.. Вот часть нужного кода &lt;?php ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу. До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru