Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как вызвать private-метод 
:(
    Опции темы
sugee
Дата 28.1.2006, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 12.6.2005

Репутация: нет
Всего: 4



Начал копать ООП в PHP5. Сразу возникли вопросы с модификаторами доступа.
Сейчас вопрос конкретно такой: как вызвать private-метод?
Я понял что вызываться он должен внутри своего класса, но почему-то попытка вызвать сам этот класс расценивается как покушение на приватный метод.
Вот простенький класс который должен выводить значение свойства.
Код

class NeVsem {
public $myNeVsem;

public function __construct() {
 $this->myNeVsem="public-свойство";
 $this->Posrednick();
}

public function Posrednick() {
 $this->__toString();
}

private function __toString() {
  return $this->myNeVsem;
  }

}

$objNeVsem=new NeVsem();
echo $objNeVsem;

Я не пытался вызывать метод __toString() из вне, я просто вызвал класс, а сам метод вызывается внутри класса, но все равно получается ошибка. Чего то я тут не догоняю smile
Добавлено @ 20:54
Только не говорите что нужно заменить private на public.
Меня интересует именно приватный метод - как его вызвать.
PM MAIL   Вверх
Mal Hack
Дата 28.1.2006, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Попробуй вот так:
Код

class NeVsem {
public $myNeVsem;
public function __construct() {
 $this->myNeVsem="public-свойство";
}
public function Posrednick() {
 $this->__toString();
}
private function __toString() {
  return $this->myNeVsem;
  }
}
$objNeVsem=new NeVsem();
 $objNeVsem->Posrednick();
echo $objNeVsem;

PM ICQ   Вверх
Illuminaty
Дата 28.1.2006, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


/*Антон Захаров*/
***


Профиль
Группа: Комодератор
Сообщений: 1238
Регистрация: 19.3.2005
Где: Россия, Казань

Репутация: нет
Всего: 56



Код

echo $objNeVsem;
равносильно вызову
Код

$objNeVsem->__toString()
, а __toString - private метод. Поэтому и ошибка
PM MAIL ICQ   Вверх
sugee
Дата 28.1.2006, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 12.6.2005

Репутация: нет
Всего: 4



Mal Hack
Неа, так тоже не получается.
Добавлено @ 21:13
Цитата(Illuminaty @ 28.1.2006, 21:03 Найти цитируемый пост)

echo $objNeVsem;

равносильно вызову

$objNeVsem->__toString()

И как же мне тогда вызвать метод __toString() если мне все-таки
вздумалось сделать его приватным?
Я просто хочу понять как вообще пользоваться приватными методами и свойствами, как их вызывать smile

Это сообщение отредактировал(а) sugee - 28.1.2006, 21:07
PM MAIL   Вверх
Irokez
Дата 28.1.2006, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


Профиль
Группа: Участник Клуба
Сообщений: 1180
Регистрация: 20.10.2004

Репутация: нет
Всего: 53



Цитата(sugee @ 28.1.2006, 21:06 Найти цитируемый пост)

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

приватные методы используются только внутри самого класса, если ты делаешь метод приватным - значит ты не хочешь, чтобы его можно было использовать извне, иначе - оставляешь его открытым, т.е. публичным. В твоем примере делать метод __toString() приватным глупо, т.к. это магический метод и вызывается при попытке обратить класс в строку (конечно есть и смысл делать его приватным если класс не нужно приводить к строке ни при каком случае), поэтому оставь его public.
PM   Вверх
sugee
Дата 28.1.2006, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 12.6.2005

Репутация: нет
Всего: 4



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

Покажите кто нить простой пример вызова такого метода!
PM MAIL   Вверх
Irokez
Дата 28.1.2006, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


Профиль
Группа: Участник Клуба
Сообщений: 1180
Регистрация: 20.10.2004

Репутация: нет
Всего: 53



Цитата(sugee @ 28.1.2006, 21:36 Найти цитируемый пост)

я просто хочу для начала понять как вызываются private-методы

извне - никак, изнутри класса - как и другие методы
PM   Вверх
Illuminaty
Дата 28.1.2006, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


/*Антон Захаров*/
***


Профиль
Группа: Комодератор
Сообщений: 1238
Регистрация: 19.3.2005
Где: Россия, Казань

Репутация: нет
Всего: 56



Код

class NeVsem {
public $myNeVsem;
public function __construct() {
 $this->myNeVsem="public-свойство";
 $this->Posrednick();
}
public function Posrednick() {
 $this->__toString();
}

private function t__toString() {
  return $this->myNeVsem;
}
private function __toString() {
  return $this->t__toString();
  }
}
$objNeVsem=new NeVsem();
echo $objNeVsem; // теперь нормально

$objNeVsem->t__toString(); // ошибка

PM MAIL ICQ   Вверх
sugee
Дата 28.1.2006, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 12.6.2005

Репутация: нет
Всего: 4



Код

class NeVsem {
public $myNeVsem;
public function __construct() {
 $this->myNeVsem="public-свойство";
 $this->Posrednick();
}
public function Posrednick() {
 $this->__toString();
}

private function t__toString() {
  return $this->myNeVsem;
}
public function __toString() {
  return $this->t__toString();
  }
}
$objNeVsem=new NeVsem();
echo $objNeVsem; // теперь нормально

вот теперь действительно нормально.
Метод __toString() должен быть public. Теперь открытый метод __toString() вызывает приватный метод t__toString().
Можно и свойство myNeVsem сделать приватным, только тогда его уже нельзя будет изменить.
Добавлено @ 00:03
Цитата(sugee @ 28.1.2006, 23:50 Найти цитируемый пост)

Можно и свойство myNeVsem сделать приватным, только тогда его уже нельзя будет изменить.
Хотя это я вру, изменить можно потому что при вызове класса public-конструктор будет обращаться к private-свойству.
Код

 class NeVsem {
private $myNeVsem;
public function __construct($param) {
 $this->myNeVsem=$param;
 $this->Posrednick();
}
public function Posrednick() {
 $this->__toString();
}

private function t__toString() {
  return $this->myNeVsem;
}
public function __toString() {
  return $this->t__toString();
  }
}
$objNeVsem=new NeVsem("новое значение");
echo $objNeVsem; 

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Extensions | Следующая тема »


 




[ Время генерации скрипта: 0.0489 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.