Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 22.11.2013
Сообщений: 79

Изучаю ООП и возникают ошибки "unexpected '(', expecting ',' or ';'"

22.11.2013, 19:27. Показов 3546. Ответов 40
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, я изучаю ООП и практикуя возникают вопросы не подвласные моему разуму, пока ) Надеюсь тут найдется добрые люди, кто направить на праведный путь, как с решением ошибок так и с избавлением от говнокода.
Сразу оговорюсь, я предпочтительно понимаю русский язык и порой мне сложно понять, что на их русском мне говорят программисты, так что если не сложно постарайтесь не злоупотреблять )

Итак.
class_Comentary.php
PHP
1
2
3
4
5
6
7
8
9
10
11
class Commentary
{
    $db=MyMysqli::getDB(); //Ошибка ругается сюда! (7 строка) Класс подключения к БД рабочий, и метод db_query тоже.
    
    public function getCommentary($query)
    {
        if($result=$this->db->db_query($query)){
            return $result;
        }
    }
}
viev.tpl
PHP
1
2
3
<?php $query='SELECT * FROM `commentary`'; ?>
<?php $getCom=new Commentary; ?>
<?php $result=$getCom->getCommentary($query); ?>
Получаю ошибку: Parse error: syntax error, unexpected '(', expecting ',' or ';' in \www\libs\class_Commentary.php on line 7
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.11.2013, 19:27
Ответы с готовыми решениями:

Изучаю Python, сейчас учу основы ООП, где можно найти задачи по ООП
Скиньте пожалуйста источники с задачами(желательно на русском)

Ошибка unexpected '.', expecting ',' or ';'
Здравствуйте! Уже полдня бьюсь с этой проблемой, надеюсь на помощь. Описание: Попытка вызова: &lt;? ...

Syntax error, unexpected '(', expecting ',' or ';' )
Добрый день, написал такой скрипт: &lt;?php class Bot { public $sName = &quot; &quot;; private $bAlive = true; private $iHealth =...

40
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
22.11.2013, 23:55
так нельзя делать. Собственно, в ошибке вам и пишет: ошибка синтаксиса, не ожидается скобка, ожидается запятая или точка с запятой.
Почитайте тему FAQ: Объектно-ориентированное программирование на PHP
0
0 / 0 / 0
Регистрация: 22.11.2013
Сообщений: 79
23.11.2013, 00:35  [ТС]
Я честно говоря не понял в чем ошибка синтаксиса.
Класс MyMysqli статический обращаюсь я к нему правильно
PHP
1
2
$db=MyMysqli::getDB();
echo ClassName::StaticFunc(); // Печатаем данные, возвращаемые методом класса
Может дело в области видимости? Но и здесь я не нашел четкого ответа http://www.php.net/manual/ru/l... otayim.php
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
23.11.2013, 01:11
Наверно самые основы стоит почитать, прежде чем браться за ООП
http://www.php.net/manual/ru/l... erties.php
Переменные, которые являются членами класса, называются "свойства". Также их называют, используя другие термины, такие как "аттрибуты" или "поля", но в рамках этой документации, мы будем называть их свойствами. Они определяются с помощью ключевых слов public, protected, или private, следуя правилам правильного описания переменных. Это описание может содержать инициализацию, но инициализация дожна применяться для константных значений - то есть, переменные должны быть вычислены во время компиляции и не должны зависеть от информации программы во время выполнения для их вычисления.
0
0 / 0 / 0
Регистрация: 22.11.2013
Сообщений: 79
23.11.2013, 11:23  [ТС]
Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
Наверно самые основы стоит почитать, прежде чем браться за ООП
Честно говоря читал, но
PHP
1
2
3
4
5
class Commentary
{
    public $db=MyMysqli::getDB();
    public function getCommentary($query)
    ........
Так была та же ошибка. Но я понял, что свойства нужно обязательно определять.
Сейчас сделал так:
PHP
1
2
3
4
5
6
7
8
9
class Commentary
{
    public function getCommentary($query)
    {
        if($result=MyMysqli::getDB()->db_query($query)){
            return $result;
        }
    }
}
И все работает, но мне хочется понять, первую схему public $db=MyMysqli::getDB(); и что в ней не так.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
23.11.2013, 11:28
kuznets, еще раз внимательнее прочитайте сообщение выше. Там должно быть константное, уже вычисленное значение.
0
 Аватар для nonamez123
189 / 185 / 54
Регистрация: 23.10.2010
Сообщений: 1,336
25.11.2013, 14:03
по красто я думаю должно быть что-то похожее на

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Commentary
{
    
    private $db = FALSE;
    
    function __construct() 
    {
        $this->db = MyMysqli::getDB();
    }
    
    public function getCommentary($query)
    {
        if ($this->db && $result = $this->db->db_query($query))
            return $result;
    }
}

Не по теме:

P.S.
Забегая далеко вперед тут очень хорошо бы было использовать http://ru.wikipedia.org/wiki/%... 0.B0_PHP_5

0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
25.11.2013, 15:35
Цитата Сообщение от nonamez123 Посмотреть сообщение
Забегая далеко вперед тут очень хорошо бы было использовать
чем хорошо тут использовать синглтон?
0
 Аватар для nonamez123
189 / 185 / 54
Регистрация: 23.10.2010
Сообщений: 1,336
25.11.2013, 17:58
Цитата Сообщение от KOPOJI Посмотреть сообщение
чем хорошо тут использовать синглтон?
что бы 10 подключений к бд не было.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
25.11.2013, 19:02
и что делать, если захочется подключения к разным серверам?
0
0 / 0 / 0
Регистрация: 22.11.2013
Сообщений: 79
25.11.2013, 19:13  [ТС]
В классе MyMysqli я уже использую синглтон, так что 10 подключений не будет. В данном случае будет использоваться одна база.
0
508 / 358 / 13
Регистрация: 12.03.2012
Сообщений: 1,896
25.11.2013, 22:03
Цитата Сообщение от kuznets Посмотреть сообщение
В классе MyMysqli я уже использую синглтон
Пойдем дальше: теперь попробуй убрать синглтон и передавать инстанс этого класса в те места, где он будет использоваться.
0
0 / 0 / 0
Регистрация: 22.11.2013
Сообщений: 79
26.11.2013, 00:14  [ТС]
А смысл его убирать? Я пока не вижу его минусов, ну вроде все говорят, что не стоит его пихать где попало, но здесь он вроде в тему.

П.С. Я не понимаю что значит "инстанс этого класса".
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
26.11.2013, 00:48
Цитата Сообщение от kuznets Посмотреть сообщение
А смысл его убирать?
Если Вы считаете что написав
PHP
1
class A {}
Вы можете сказать что знаете, понимаете и используете ООП для своих проектов - то это далеко не так...
Суть ООП не просто написание классов, а написания их так, что бы они были переносимы, что бы проекты были модульными и легко расширяемыми, а так же, что бы затронув один класс, было как можно меньше (а в идеале что бы вообще не было) изменений в других классах.
Не нужно писать фразы типа
Цитата Сообщение от kuznets Посмотреть сообщение
В данном случае будет
Старайтесь писать так, что бы этот класс потом можно было легко использовать для других проектов, в которых возможно понадобится несколько коннектов к разным бд.

Почитайте книги по ООП не именно пхп, а там где описывают различные подходы, паттерны проектирования, а потом посмотрите как пишут код в фреймворках, зная паттерны будетп роще понять что там делается и для чего.
Цитата Сообщение от kuznets Посмотреть сообщение
Я пока не вижу его минусов
Предположим, что на хостинге где размещается сайт нет mysqli, или выбрана вообще другая субд, не mysql, вот напишите класс так, что бы было легко перейти на другую субд, не меняя класса комментариев.

Передав в конструктор класса объект для доступа к бд, при изменении субд, можно просо передать экземпляр другого класса, например MongoDB.
а для обеспечения совместимости, нужно использовать интерфейсы, которые гарантируют, что класс содержит необходимые методы.
0
0 / 0 / 0
Регистрация: 22.11.2013
Сообщений: 79
26.11.2013, 00:58  [ТС]
Вы можете сказать что знаете, понимаете и используете ООП для своих проектов - то это далеко не так...
Я пока учусь, какое там понимание. Но если мне говорят, убирай, то мне интересно почему. Потому, что я хочу понимать, а не просто убирать.

Старайтесь писать так, что бы этот класс потом можно было легко использовать для других проектов, в которых возможно понадобится несколько коннектов к разным бд.
Ехал с работу сегодня и думал об этом и лучше, что пришло в голову для разных БД свой класс, вызываешь то, что тебе нужно. Возможно спустя (что скорее всего) n времени я буду думать по другому. Разбор сейчас фреймворков почти бесполезен, я там смотрю в книгу и вижу, сами знаете что. Хотя так, или иначе приходится смотреть yii.
Читать то я много, что читаю, но времени в сутках всего 24ч ) а еще надо прочитанное попробовать.
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
26.11.2013, 01:02
Ну так по этому я и посоветовал начать всё таки с паттернов, перед разбиранием кода фв
Когда будите в фв видетьп отом знакомый код, будите вспоминать что это за паттерн, и для чего его используют)
0
508 / 358 / 13
Регистрация: 12.03.2012
Сообщений: 1,896
26.11.2013, 09:18
Цитата Сообщение от kuznets Посмотреть сообщение
А смысл его убирать? Я пока не вижу его минусов, ну вроде все говорят, что не стоит его пихать где попало, но здесь он вроде в тему.
Это антипаттерн.
Я не знаю ситуаций, где без него нельзя было бы обойтись.
При этом минусы очевидны:

Цитата Сообщение от http://www.rsdn.ru/forum/design/2615563.1
1. Синглтон нарушает SRP (Single Responsibility Principle) — класс синглтона, помимо того чтобы выполнять свои непосредственные обязанности, занимается еще и контролированием количества своих экземпляров.
2. Глобальное состояние. Про вред глобальных переменных вроде бы уже все знают, но тут та же самая проблема. Когда мы получаем доступ к экземпляру класса, мы не знаем текущее состояние этого класса, и кто и когда его менял, и это состояние может быть вовсе не таким, как ожидается. Иными словами, корректность работы с синглтоном зависит от порядка обращений к нему, что вызывает неявную зависимость подсистем друг от друга и, как следствие, серьезно усложняет разработку.
3. Зависимость обычного класса от синглтона не видна в публичном контракте класса. Так как обычно экземпляр синглтона не передается в параметрах метода, а получается напрямую, через GetInstance(), то для выявления зависимости класса от синглтона надо залезть в тело каждого метода — просто просмотреть публичный контракт объекта недостаточно.
4. Наличие синглтона понижает тестируемость приложения в целом и классов, которые используют синглтон, в частности. Во-первых, вместо синглтона нельзя подпихнуть Mock-объект, а во-вторых, если синглтон имеет интерфейс для изменения своего состояния, то тесты начинают зависеть друг от друга.
Говоря же проще — синглтон повышает связность, и все вышеперечисленное, в том или ином виде, есть следствие повышения связности.
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
26.11.2013, 11:15
имхо, пункты надуманы и накручены какими то частными случаями и недопониманием для чего используют синглтон.
Цитата Сообщение от OnYourLips Посмотреть сообщение
класс синглтона, помимо того чтобы выполнять свои непосредственные обязанности, занимается еще и контролированием количества своих экземпляров
Даже если перевести слово сингтон, то станет видно, что он и должен контролировать количество своих экземпляров, а точнее оно должно быть равно 1.
Собственно даже открыв вики, и прочитав первую фразу, можно увидеть что человек, писавший первый пункт, не до конца понимает что такое синглтон.

Вообщем первые три пункта очень спорные...

Я не сторонник синглтонов, но и пункты, описывающие минусы, приведённые на том сайте, основаны на недопонимании что такое синглтон и где его можно использовать...
У ТС один из примеров, неправильного использования синглтонов.
И действительно, синглтон сильно связывает приложение, но точно так его связывает любая функция из набора расширений пхп, типа SimpleXML, mb_strlen... нужно в идеале вообще всё обернуть своими классами
0
508 / 358 / 13
Регистрация: 12.03.2012
Сообщений: 1,896
26.11.2013, 21:40
DrobyshevAlex, приведи мне ситуацию, где использование синглтона оправдано.
Вышеприведенный пример - класс доступа к базе - яркий пример, где синглтон использовать ни в коем случае нельзя.
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
26.11.2013, 22:57
Цитата Сообщение от OnYourLips Посмотреть сообщение
Вышеприведенный пример - класс доступа к базе - яркий пример, где синглтон использовать ни в коем случае нельзя.
Я сказал что это не так?
Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
У ТС один из примеров, неправильного использования синглтонов.
Цитата Сообщение от OnYourLips Посмотреть сообщение
приведи мне ситуацию, где использование синглтона оправдано.
Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
не сторонник синглтонов, но и пункты, описывающие минусы, приведённые на том сайте, основаны на недопонимании что такое синглтон и где его можно использовать...
Мне кажется Вы меня не так поняли.
Я же говорю, что я сам не сторонник синглтонов.

Но Вы почитайте те пункты.
Синглтон что должен делать? Следить что бы экземпляр был 1.
Что в первом пункте написано?
Цитата Сообщение от OnYourLips Посмотреть сообщение
помимо того чтобы выполнять свои непосредственные обязанности, занимается еще и контролированием количества своих экземпляров.
То есть тут как раз основная задача синглтона, выставлена как будто это его баг

Так раз задачей синглтона является слежение за количеством объектов, то зачем приводить пример что он даёт связывание, на основании кода ТС? Связывание даёт любая функция, мало функций в пхп устаревших? тот де split. В идеале, все функции надо обернуть, что бы даже функций ядра языка на котором пишется проект не было

Синглтоны можно вообще не использовать, я не спорю.
Но я писал выше о том, что пункты там описаны не правильно.
Да минус - это связывание различных классов приложения в случае как у ТС. Но не кто не заставляет использовать синглтон так... это не задача дать глобальный доступ. Задача что бы объект был 1
Цитата Сообщение от OnYourLips Посмотреть сообщение
Зависимость обычного класса от синглтона не видна в публичном контракте класса.
Откуда опять взялась зависимость? Опять же из за неправильной трактовки понятия синглтона. Дело же не в паттерне а в умении его готовить

Цитата Сообщение от OnYourLips Посмотреть сообщение
Наличие синглтона понижает тестируемость приложения в целом и классов, которые используют синглтон, в частности. Во-первых, вместо синглтона нельзя подпихнуть Mock-объект
Легко...

Цитата Сообщение от OnYourLips Посмотреть сообщение
если синглтон имеет интерфейс для изменения своего состояния, то тесты начинают зависеть друг от друга.
непонятное использование синглтона.
если у шевралет камаро есть колёса и мощный мотор, это не значит что на нём поля пахать нужно...

Цитата Сообщение от OnYourLips Посмотреть сообщение
Про вред глобальных переменных вроде бы уже все знают, но тут та же самая проблема.
Тут вообще о чём разговор? При чём тут глобальные переменные?
Автор использует сингтон так?
PHP
1
for (Counter::GetInstance()->i = 0;  Counter::GetInstance()->i < 10; Counter::GetInstance()->i ++)
Если да, то вопросов больше не имею...

Код без синглтона
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Config {...};
 
class App
{
public:
    App(Config* config): m_config(config) {}
 
private:
   Config* m_config;
};
 
Config* config = new Config;
App login(Config->GetAuthConfig());
App game(Config->GetWorldConfig());
код с синглтоном
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Config {
    static Config* GetInstance();
};
#define Config::GetInstance()
 
class App
{
public:
    App(Config* config): m_config(config) {}
 
private:
   Config* m_config;
};
App login(Config->GetAuthConfig());
App game(Config->GetWorldConfig());
Теперь предположим что вам нужно иметь всегда один общий сокет-менеджер, подписку на события...
Вам нужно быть уверенным что это тот же объект. С синглтоном вы уверены, что везде у вас один объект.

Вопрос: чем код с синглтоном более связан чем без синглтона?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.11.2013, 22:57
Помогаю со студенческими работами здесь

Ошибка: unexpected '(', expecting T_STRING
Привет ув. форумчане , я новичок. Начал изучать книгу (Маклафлин Б. PHP и MySQL. Исчерпывающее руководство (2013) - первая книга) , по ходу...

Unexpected T_STRING, expecting T_VARIABLE
Parse error: syntax error, unexpected T_STRING, expecting T_VARIABLE in S:\home\kursovaya.ru\www\core\bd.php on line 3 Возникает тут: ...

Syntax error, unexpected ')', expecting ';' на line 16
Как исправить ошибку и/или помогите, пожалуйста, решить проблему. Надо чтобы на определённой странице создавались ссылки на произведения. ...

Ошибка - syntax error, unexpected ':', expecting ',' or ')'
Подскажите где здесь ошибка &lt;?php require_once 'db.php'; $Login = $_POST; $Group = $_POST; $FIO = $_POST; ...

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru