[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: private функция видна как public
victoor
Добрый день! Есть такой код:
<?php
error_reporting(E_ALL);

class TMyPDO extends PDO
{
function __construct()
{
$this->dbh = parent::__construct("mysql:host=localhost;dbname=test_db",'test_user','test_passwd');
return $this->dbh;
}

public function dsa() { echo "you can use me\n"; }

private function asd() { echo "it's impossible!\n"; }
}


$dbc = new TMyPDO();

echo '<pre>';
$dbc->dsa();
$dbc->asd();
?>

Результат:
Цитата
you can use me
it's impossible!

Подскажите, почему функция asd(), объявленная как private всё равно вызывается, как и public?



Спустя 18 минут, 43 секунды (20.08.2012 - 14:48) T1grOK написал(а):
Ничего подобного. Переменная(свойство) dbh в родительском классе и текущем - это совершенно разные переменные. Сек не вьехал в суть вопроса.

Спустя 16 минут, 51 секунда (20.08.2012 - 15:05) victoor написал(а):
Цитата (T1grOK @ 20.08.2012 - 12:48)
Ничего подобного. Переменная(свойство) dbh в родительском классе и текущем - это совершенно разные переменные.

т.е?
я ожидаю, что при вызове privat function вылезет что-то подобное:
Цитата
Fatal error:  Call to private method foo::asd()

Спустя 25 минут, 48 секунд (20.08.2012 - 15:31) sergeiss написал(а):
Я попробовал запустить твой код, получил

Цитата
Fatal error:  Call to private method TMyPDO::asd() from context '' in <тут было имя скрипта> on line 27


Спустя 9 минут, 12 секунд (20.08.2012 - 15:40) victoor написал(а):
Цитата (sergeiss @ 20.08.2012 - 13:31)
Я попробовал запустить твой код, получил

Цитата
Fatal error:  Call to private method TMyPDO::asd() from context '' in <тут было имя скрипта> on line 27

Но там всего 22 строки smile.gif
Почему тогда у меня этот вызов возможен?

Спустя 1 час, 37 минут, 58 секунд (20.08.2012 - 17:18) sergeiss написал(а):
Если честно - то не знаю, почему. У тебя вообще что установлено: Денвер или отдельно Апач, ПХП? Какие версии?

А 27-я строка - это у меня в скрипте, потому что там еще заголовки есть smile.gif На ПХП они никак не влияют.

Спустя 3 часа, 37 минут, 37 секунд (20.08.2012 - 20:56) Invis1ble написал(а):
Цитата
Fatal error: Call to private method TMyPDO::asd() from context '' in ... on line 21

PHP 5.4.0

Спустя 39 минут, 25 секунд (20.08.2012 - 21:35) inpost написал(а):
victoor
display_errors в htaccess пропиши. Отключи буферизацию на сервере. Проверь, если ошибки не будет, версию назови. Может бета-старой какой-нибудь.

Спустя 11 часов, 43 минуты, 38 секунд (21.08.2012 - 09:19) victoor написал(а):
Цитата (inpost @ 20.08.2012 - 19:35)
victoor
display_errors в htaccess пропиши. Отключи буферизацию на сервере. Проверь, если ошибки не будет, версию назови. Может бета-старой какой-нибудь.

Что такое "отключить буферизацию на сервере"? И зачем что-то писать в htaccess, ведь есть error_reporting в самом коде? Вписал php_flag display_errors on, получил Internal Server Error, в логе
Цитата
[Tue Aug 21 09:09:36 2012] [alert] [client 127.0.0.1] C:/WebServers/home/test2/.htaccess: Invalid command 'php_flag', perhaps
misspelled or defined by a module not included in the server configuration


Система: WinXPSP3 со всеми обновами. Никаких денверов, только оригинальное ПО :)

PHP 5.2.6 (cli) (built: May 2 2008 18:02:07)
Server version: Apache/2.2.11 (Win32)
mysql Ver 14.12 Distrib 5.0.67, for Win32 (ia32)

PHP в апаче подключен как CGI:

ScriptAlias /php/ "c:/php5/"
AddType application/x-httpd-php .php
Action application/x-httpd-php "/php/php-cgi.exe"


хм, попробовал другую версию:
PHP 5.2.17 (cli) (built: Jan 6 2011 17:28:41)

там действительно всё в порядке, метод не виден :blink:

Спустя 3 часа, 13 минут, 29 секунд (21.08.2012 - 12:32) inpost написал(а):
Системы бывают багнутыми, возможно в данной сборке и был данный баг. Сейчас 5.4 версия стабильная, год назад была 5.3.

Спустя 5 дней, 5 часов, 51 секунда (26.08.2012 - 17:33) KOPOJI написал(а):
просто в начале скрипта две строчки
ini_set('display_errors','On');
error_reporting(E_ALL|E_STRICT);

а вообще такого быть не может. попробуй код заново написать, в другом файле..
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.