Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: классы

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
Prizma
Отправлено: 29 Декабря, 2012 - 12:24:35
Post Id



Посетитель


Покинул форум
Сообщений всего: 463
Дата рег-ции: Июнь 2012  
Откуда: Санкт-Петербург


Помог: 5 раз(а)




Есть 3 вида переменных в классах:
public - без ограничений
private - только внутри класса
protected - только из потомков данного класса

вот мой код:

PHP:
скопировать код в буфер обмена
  1. class myclass{
  2.         public $var1 = 'var1<br />';
  3.         protected $var2 ='var2<br />';
  4.         private $var3 = 'var3<br />';
  5.        
  6.         function f1(){
  7.                 return $this->var1;
  8.         }
  9.        
  10.         function f2(){
  11.                 return $this->var2;
  12.         }
  13.        
  14.         function f3(){
  15.                 return $this->var3;
  16.         }
  17. }
  18.  
  19. $class = new myclass;
  20. echo 'var1 - '.$class->var1;    # var1 - var1
  21. echo 'f1 - '.$class->f1();              # f1 - var1
  22. echo 'f2 - '.$class->f2();              # f2 - var2
  23. echo 'f3 - '.$class->f3();              # f3 - var3


тут я могу вывести переменную public остальные не могу(выдает ошибку) могу вывести остальные переменные через потомков(через функции)

так в чем же разница между private и protected? не могу понять
и ту и другую я могу вызвать через потомков, не могу вызывать напрямую как private, где то есть еще наверно разграничение доступа у переменных этих двух типов? из определения которое я нашел и привёл в начале я их не смог вывести. Прошу объяснить в чем же разница между protected и private?
 
My status
 Top
KingStar
Отправлено: 29 Декабря, 2012 - 12:27:09
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




узнаешь только когда наследуешь класс в другой (extends)


-----
То что программа работает, не означает что она написана правильно!
 
 Top
esterio
Отправлено: 29 Декабря, 2012 - 12:34:11
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




private не наследуеться, зато protected будет унаследуван в потомке
 
 Top
Prizma
Отправлено: 29 Декабря, 2012 - 12:47:20
Post Id



Посетитель


Покинул форум
Сообщений всего: 463
Дата рег-ции: Июнь 2012  
Откуда: Санкт-Петербург


Помог: 5 раз(а)




PHP:
скопировать код в буфер обмена
  1. <?
  2.     class MyClass1 {
  3.                 public $var1 = 'var1';
  4.                 protected $var2 = 'var2';
  5.                 private $var3 = 'var3';
  6.     }
  7.  
  8.     class MyClass2 extends MyClass1 {
  9.                 function f1(){
  10.                         echo parent::var1; # error
  11.                 }
  12.  
  13.                 function f2(){
  14.                         echo parent::var2; # error
  15.                 }
  16.  
  17.                 function f3(){
  18.                         echo parent::var3; # error
  19.                 }
  20.     }  
  21.  
  22.     $obj = new MyClass2();
  23.     $obj->f1();
  24.         $obj->f2();
  25.         $obj->f3();
  26.        
  27. ?>


попытался сделать нечто подобное но сразу вылетает ошибка, что не так с вызовом переменной? все 3 не вызываются
(Добавление)
PHP:
скопировать код в буфер обмена
  1. <?
  2.     class MyClass1 {
  3.                 public $var1 = 'var1';
  4.                 protected $var2 = 'var2';
  5.                 private $var3 = 'var3';
  6.     }
  7.  
  8.     class MyClass2 extends MyClass1 {
  9.                 function f1(){
  10.                         echo var1;
  11.                 }
  12.  
  13.                 function f2(){
  14.                         echo var2;
  15.                 }
  16.  
  17.                 function f3(){
  18.                         echo var3;
  19.                 }
  20.     }  
  21.  
  22.     $obj = new MyClass2();
  23.     $obj->f1();
  24.         $obj->f2();
  25.         $obj->f3();
  26.        
  27. ?>

убрал parent и всё заработало ... только выводит все 3 ... и protected и private

(Отредактировано автором: 29 Декабря, 2012 - 12:48:20)

 
My status
 Top
esterio
Отправлено: 29 Декабря, 2012 - 13:16:39
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




Prizma пишет:
echo var3;

константа которой не существует переводиться в строку нужно заменить на

(Отредактировано автором: 29 Декабря, 2012 - 13:36:00)

 
 Top
avtor.fox
Отправлено: 29 Декабря, 2012 - 13:19:32
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


Помог: 50 раз(а)




Prizma пишет:
убрал parent и всё заработало ... только выводит все 3 ... и protected и private

И правильно. Вы обращаетесь к свойствам из методов. Если обратиться напрямую к свойствам (вне класса), то в последних двух выводах будет ошибка.
 
 Top
sKaa
Отправлено: 29 Декабря, 2012 - 13:29:11
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


esterio пишет:

константа которой не существует переводиться в строку нужно испотзовать

боюсь это совсем не константа.
вот константа.

PHP:
скопировать код в буфер обмена
  1.  
  2. class Foo {
  3.   const BAR = 'BAR';
  4. }
  5.  
  6.  


Кстати, вы оба такой фигни там понаписали в топики про языки ))))
 
 Top
esterio
Отправлено: 29 Декабря, 2012 - 13:32:47
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




А define('constName', 'constValue'); не константа
 
 Top
sKaa
Отправлено: 29 Декабря, 2012 - 13:36:53
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


А define не самая быстрая функция. Да и речь шла о свойствах класса, я вас просто поправил, что это не константы.
 
 Top
esterio
Отправлено: 29 Декабря, 2012 - 13:40:51
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




Если ж придератся то вопрос был о модификаторах доступа
 
 Top
sKaa
Отправлено: 29 Декабря, 2012 - 13:43:26
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


Если не придираться Вы так и будете говорить неправильно =)
 
 Top
esterio
Отправлено: 29 Декабря, 2012 - 13:47:13
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




Ну тогда обьясните в чем моя ошыбка
 
 Top
sKaa
Отправлено: 29 Декабря, 2012 - 13:57:43
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


esterio пишет:
в чем моя ошыбка
жи-ши пиши с "и" ?)))
Повторяю вам $this->var - это свойство класса, а не константа, коей вы её назвали.
 
 Top
esterio
Отправлено: 29 Декабря, 2012 - 14:17:03
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




1. я с Украины что неоднократно писал. С граматикой у меня проблемы и я ето знаю.
2. ТП написал
Prizma пишет:
class MyClass1 {
public $var1 = 'var1';
protected $var2 = 'var2';
private $var3 = 'var3';
}

class MyClass2 extends MyClass1 {
function f1(){
echo var1;
}

function f2(){
echo var2;
}

function f3(){
echo var3;
}
}

$obj = new MyClass2();
$obj->f1();
$obj->f2();
$obj->f3();


теепер вопрос что будет если будет

Далее не имеет смысла продолжать спор так как Вы с самого начала не поняли почему я назвал константа.
3.
Prizma пишет:
Прошу объяснить в чем же разница между protected и private?

public, protected, private ето не модификаторы доступа или мне називать их как-нибуть по другому?
 
 Top
avtor.fox
Отправлено: 29 Декабря, 2012 - 14:25:54
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


Помог: 50 раз(а)




esterio пишет:
public, protected, private

Это область видимости метода или свойства (модификаторы доступа).

esterio
Тс не написал указатель на свойства класса. И Вы правы, при выводе неопределённой константы получится -

PHP:
скопировать код в буфер обмена
  1. echo TEST; //Выведет TEST
  2. ##########
  3. const TEST = 'Привет. Это тест!';
  4. echo TEST; //Выведет 'Привет. Это тест!'
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB