Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Классы


Автор: GQU 2.4.2011, 18:08
Почему на 6 строке ошибка ?
Код

<?php
class A {
    var $name;

     function Setname($name){
      $this->name=$name;
      echo $this->$name;
     }
}

class B extends A {
}

$str1='...';
$str2='........';
A::Setname($str1);
$b = new B;
$b->Setname($str2);
?>

Автор: Muerto 2.4.2011, 18:15
GQU, Название метода должно быть с маленькой буквы , и каждое слово или через черточку, или с большой буквы

а возможно здесь если у вас php5
Код

   var $name;


И здесь

Код

 echo $this->$name;

->$n

Автор: нуп 2.4.2011, 18:35
A::Setname($str1);
Вызываете статическую функцию?  smile 

Автор: bars80080 2.4.2011, 18:37
Цитата(Muerto @  2.4.2011,  18:15 Найти цитируемый пост)
Название метода должно быть с маленькой буквы , и каждое слово или через черточку, или с большой буквы

почему должно?

Цитата(Muerto @  2.4.2011,  18:15 Найти цитируемый пост)
а источник ошибки  я думаю здесь
Выделить всёкод PHP
1:
    
   var $name;

нет


Код

 echo $this->name;


Автор: Muerto 2.4.2011, 19:06
bars80080,
Что нет то   smile 
Код

echo $this->$name;



А плохо
Setname

потому что так не принято ( конечно каждый может писать как ему угодно...)

Ну это coding standarts...

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


Иначе нафиг индентация? машина и так все разберет  smile 

Автор: bars80080 2.4.2011, 22:48
Цитата(Muerto @  2.4.2011,  19:06 Найти цитируемый пост)
Что нет

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


Цитата(Muerto @  2.4.2011,  19:06 Найти цитируемый пост)
А плохо
Setname

потому что так не принято

кем не принято? папой римским?

Цитата(Muerto @  2.4.2011,  19:06 Найти цитируемый пост)
Ну это coding standarts...

ну-ка, ну-ка, можно мне ссылку на эти стандарты, а главное ссылку на уголовный или административный кодекс, который запрещает нарушать их



если советуешь что-то, то отделяй указания на ошибку и рекомендации по оформлению. а то у тебя выходит, что из-за строчной буквы в названии функции, ошибка получается.

Автор: Muerto 2.4.2011, 22:53
bars80080, 
Мною была исправлена всего одна строка
Было:
Цитата

GQU, Название метода должно быть с маленькой буквы , и каждое слово или через черточку, или с большой буквы

Источник ошибки возможно здесь
Код

   var $name;


И здесь

Код

 echo $this->$name;

->$n


Патом я решил уточнить насчет var

и написал то что есть сейчас

Цитата

GQU, Название метода должно быть с маленькой буквы , и каждое слово или через черточку, или с большой буквы

а возможно здесь если у вас php5
Код

   var $name;


И здесь

Код

 echo $this->$name;

->$n



Так что все как было так и осталось...


Я КОНКРЕТНО УКАЗАЛ НА ОШИБКУ, может ещё раз 10 написать 
Код

 echo $this->$name;

->$n 


А насчет coding standarts - в Php их устанавливает Zend...

Я вам как ZCE говорю как они советуют...
Это не секрет ни для кого, все на их сайте есть...
Можно на фреймворк посмотреть тоже...

А как студент B.sc Computer Science ещё и добавляю как учат нас  smile 

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

Что тут ещё добавить... Peace и я думал что подчеркнутый знак $ увидят... ну в след раз не буду оставлять загадок  smile 

Автор: bars80080 2.4.2011, 23:03
Цитата(Muerto @  2.4.2011,  22:53 Найти цитируемый пост)
Так что все как было так и осталось...

нет, поменялось в корне, так именно от версии пхп зависит верность выражения


Цитата(Muerto @  2.4.2011,  22:53 Найти цитируемый пост)
Я КОНКРЕТНО УКАЗАЛ НА ОШИБКУ, может ещё раз 10 написать 
Выделить всёкод PHP
1:
    
 echo $this->$name;

->$n 

охрененно непонятно для одного символа. трудно написать так, как должно быть? какое-то n взялось? специально, чтобы поупражнять мозг?


Цитата(Muerto @  2.4.2011,  22:53 Найти цитируемый пост)
А насчет coding standarts - в Php их устанавливает Zend...

Я вам как ZCE говорю как они советуют...
Это не секрет ни для кого, все на их сайте есть...
Можно на фреймворк посмотреть тоже...

А как студент B.sc Computer Science ещё и добавляю как учат нас 

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


Цитата(Muerto @  2.4.2011,  22:53 Найти цитируемый пост)
и я думал что подчеркнутый знак $ увидят

 smile  он не подчёркнут

Автор: Muerto 2.4.2011, 23:14
bars80080, Ну блин он ЖИРНЫЙ , все равно что подчеркнут  smile  

А насчет coding-standarts Это лишь совет... хотите программируйте "не правильно"
Лучшие умы мира выходили за рамки обще принятого и добивались удевительного успеха...
Иногда да стоит изобретать велосипеды... но дело это как правило ну очень не благодарное  smile 

Кстати вот немного от Zend http://framework.zend.com/manual/en/coding-standard.coding-style.html

Автор: SneG0K 2.4.2011, 23:32
Цитата(GQU @  2.4.2011,  17:08 Найти цитируемый пост)
Почему на 6 строке ошибка ?

А что ты вообще хотел добиться этим кодом?
Ты пытался вызвать метод? Или просто сделать сеттер?

Цитата(Muerto @  2.4.2011,  17:15 Найти цитируемый пост)
->$n

И че? Мне от этого стало еще непонятней. В рекомендациях от Zend нигде не написано, что стоит преднамеренно усложнять код, там наоборот написано, что переменным надо давать осмысленные имена.

Это во-первых:
Цитата(нуп @  2.4.2011,  17:35 Найти цитируемый пост)
A::Setname($str1);
Вызываете статическую функцию?    

Это во-вторых:
Цитата(bars80080 @  2.4.2011,  17:37 Найти цитируемый пост)
echo $this->name;


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

И если уж зашла речь о каких либо правилах, то тогда уж
Цитата(GQU @  2.4.2011,  17:08 Найти цитируемый пост)
public\private\protected $name;


Добавлено через 3 минуты и 33 секунды
Цитата(Muerto @  2.4.2011,  21:53 Найти цитируемый пост)
Я вам как ZCE говорю как они советуют...

Я вам как обычный человек говорю, что так
Цитата

->$n

они точно не советуют

Автор: Muerto 2.4.2011, 23:37
SneG0K, Автор скорее всего использует php4 я не уверен что там вообще protected есть... там норм инкапсуляции полей нету, да и методов...

Давай один раз и навсегда покончим с загадками

->$n
Говорит лишь об одном
Ошибка в 6той строке потому что автор написал

Код

echo $this->$name;


а нужно
Код

echo $this->name;


Разница именно в несчастном долларе... такой уж синтакс у php , вините не меня smile 

Автор: SneG0K 3.4.2011, 00:54
Цитата

Разница именно в несчастном долларе... такой уж синтакс у php , вините не меня

У него нормальный синтаксис.
Ты сам написал 
Цитата

->$n


Добавлено через 35 секунд
На самом деле в 6-й строке ошибки нет

Автор: Gold Dragon 3.4.2011, 08:22
я в шоке  smile ... ошибку сразу увидел, но так и не понял что такое 
Код

echo $this->$name;

->$n

пока Muerto не написал 
Цитата

а нужно

echo $this->name;


Muerto, ты умеешь заинтриговать smile Пришлось даже дочитать до конца чтобы понять что ты имеешь в виду

Автор: нуп 3.4.2011, 10:01
Цитата(bars80080 @  2.4.2011,  23:03 Найти цитируемый пост)
 вот Семён Петрович Удьяненко


Откуда вы знаете как меня зовут  smile 

Автор: MoLeX 4.4.2011, 07:42
Цитата(Muerto @  2.4.2011,  18:15 Найти цитируемый пост)
Название метода должно быть с маленькой буквы

Цитата(Muerto @  2.4.2011,  22:53 Найти цитируемый пост)
А насчет coding standarts - в Php их устанавливает Zend...

ерунда

Автор: KLeonid 4.4.2011, 07:53
Лалала-блаблабла.... и хоть бы кто объяснил автору в чем проблема smile.
А проблема в том, что он пытается вывести значение переменной, которое только что присвоил, используя его как имя переменной.
Т.е. если он вызывает A::Setname('guru'), то реально в методе идет обращение к свойству A::'guru' ($this->'guru').
Правильный вариант должен выглядеть так:

Код

class A {
  private $name;

   public function Setname($name){
      $this->name = $name;
      echo $this->name;
   }
}


А на счет стандартов ОФОРМЛЕНИЯ кода (а не кодирования), то черточка, или дефис, использовать в названиях нельзя. Или вы подчеркивание ( _ ) называете черточкой? smile  А еще программисты... smile 
Лично я использую Camel Style (принятый в симфони) и ноги клал на рекомендации зенда smile .

Автор: KIRINDORF 4.4.2011, 08:59
KLeonid, вы не справедливы к сообществу программистов форума!

Автору сразу ответили:

Цитата(нуп @ 2.4.2011,  18:35)
A::Setname($str1);
Вызываете статическую функцию?  smile

а так же:
Цитата(bars80080 @ 2.4.2011,  18:37)

Код

 echo $this->name;

а в конце еще раз все то же самое подытожил SneG0K

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

10 : 0  нЕ в его пользу!



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)