ООП. Обращение к параметру класса внутри аргумента метода этого же класса

tonchikp

Новичок
Уважаемые форумчане!
Помогите пожалуйста разобраться, почему PHP говорит что "Parse error: syntax error, unexpected '$this' (T_VARIABLE) in my.php on line".
PHP:
class myClass {

$myPar='myValue';

function myFunction($myVar=$this->myPar) {
...myCode...
}

}
Пробовал заменить '$this->' на 'self::', тоже не получается.
Что я делаю не так? Если можно ответ по-подробнее
 
Последнее редактирование:

hell0w0rd

Продвинутый новичок
потому что в аргументах $this не доступен. к null приравнивай не обязательные параметры, а дальше проверяй if ($myvar === null) {}
 

tonchikp

Новичок
потому что в аргументах $this не доступен. к null приравнивай не обязательные параметры, а дальше проверяй if ($myvar === null) {}
Вот так?
PHP:
class myClass {

$myPar='myValue';

function myFunction($myVar=null) {
if($myVar===null) {$myVar=$this->myPar;}
...myCode...
}

}
А нет более лаконичного решения? У меня несколько таких переменных, и как представлю кучу if-условий, то как то некрасиво получится.
А обращение через 'self::' тоже недоступно в аргументах?
 

WMix

герр M:)ller
Партнер клуба
PHP:
class myClass {

    $myPar='myValue';

    function getMyPar( $myPar=null ){
        if($myParr===null) return $this->myPar;
        return $myPar;
    }
    function myFunction($myVar=null) {
        $myVar=$this->getMyPar( $myPar );
        ...myCode...
    }

}
 

tonchikp

Новичок
Более лаконичным решением, я думаю, будет пересмотр структуры класса.
А поконкретнее?
Я открыл для себя (к сожалению поздно) класс mysqli, оказывается всё уже сделано разработчиками, но обёртку всё равно решил сделать, чтобы не запоминать методы, да и как то красивее получается
 

AnrDaemon

Продвинутый новичок
А поконкретнее?
Поконкретнее перепишите свой класс так, чтобы не приходилось так извращаться.

Я открыл для себя (к сожалению поздно) класс mysqli, оказывается всё уже сделано разработчиками,
Тогда откройте для себя и PDO уже.

но обёртку всё равно решил сделать, чтобы не запоминать методы, да и как то красивее получается
Не майтесь дурью, пожалейте того, кто ваш код будет поддерживать после вас.
 

hell0w0rd

Продвинутый новичок
AnrDaemon, гм, если обертка нормальная - по моему здравое решение. Тут можно и на PDO перейти и что хочешь делать.
 

fixxxer

К.О.
Партнер клуба
Обертку из той же доктрины можно взять, например.

Судя по этому комментарию, автор делает какую-то ерунду, типа mysql_-функций, обернутых в класс as is. Вангую, что вопрос относится к кейсу вида public function query($dbLink = $this->dbLink) :)
 

tonchikp

Новичок
Поконкретнее перепишите свой класс так, чтобы не приходилось так извращаться.
Похоже я набрёл на предел конкретности

Тогда откройте для себя и PDO уже.
Всему своё время, дойду и до PDO, мне это тоже интересно. Сейчас пока острой необходимости вроде нет. Если не трудно, в двух словах, сильная что ли там разница? Прям принципиально что-то новое?

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

tonchikp

Новичок
Судя по этому комментарию, автор делает какую-то ерунду, типа mysql_-функций, обернутых в класс as is. Вангую, что вопрос относится к кейсу вида public function query($dbLink = $this->dbLink) :)
Ну возможно и ерунда, но облегчает жизнь мне, как программисту. Просто я ещё и музыкант, а потому много времени в музыку уходит, но ужасно люблю писать код. Вот и пишу в свободное время, которого не так много, к сожалению. Для меня MySQL что-то новое (относительно), поэтому иногда забываю его, вот и приходится писать свои функции-обёртки. Но постепенно функции нагружаются дополнительными задачами и вроде как превращаются из простых функций-обёрток в что-то другое. Мне кажется, что это хорошо, код живёт.
 
Последнее редактирование:

AnrDaemon

Продвинутый новичок
Рискую сейчас вызвать гнев сообщества, но я программист-одиночка и поддержка моего кода другими людьми не планируется. Скажу даже более, я не хотел бы чтобы другие его поддерживали, а потому не заморачиваюсь этой задачей. Пожалуй единственное что я делаю в эту сторону это придерживаюсь одного стиля при написании кода.
Ты что, собрался жить вечно?
 

cia

Новичок
А поконкретнее?
Покажи весь класс. Посоветую что-нибудь.
А вообще рекомендую получше изучить что такое статика и динамика в ООП. Тогда станет понятно когда надо использовать "$this", а когда "self::".

А что? Почему бы и нет :) В век современных-то технологий :) Только надеюсь всё же эти технологии будут работать не на моём коде :)
Да на этом форуме, походу, бесконечно троллить друг друга в почёте
 
Сверху