написал вот так: PHP: <?php class settings { var $mysql=array ( 'host' => 'localhost', 'user' => 'user', 'pass' => 'pass', 'base' => 'test', ); function give_mysql() { return $this->mysql; } } settings::give_mysql(); ?> при запуске выдает: Fatal error: Using $this when not in object context in C:\Program Files\xampp\htdocs\class\test.php on line 26 где я ошибся?
$this - обращение к текущему экземпляру (объекту) класса. При статическом обращении экземпляры не создаются. Т.е. или return self::$mysql или $a = new settings(); $a->give_mysql();
а где можно про это почитать разборчиво? я так и не могу понять, когда нужно со стрелочкой вызывать, а когда с двумя двоеточиями
http://www.php.net/manual/en/language.oop5.php Ну и в любой книжке про ООП ибо это основы... типа echo "Hello world!";
новичков сбивает с толку, что в доках и в сообщениях об ошибке может встретиться "Class::method" приэтом имеется в виду НЕстатический вызов $o->method(). просто разработчики так привыкли. нелогичность №0. документация. пример: http://php.net/SoapServer весь Table of Contents описан с ::, а методы НЕстатические нелогичность №1. сообщения об ошибках PHP: <?php $a = new A(); $a->bar(); // обращение к ЭКЗЕМПЛЯРУ класса ошибка: "Call to undefined method A::bar()" выглядит так, как будто мы обращались к статическому методу нелогичность №2. синтаксис обращения к перекрытому методу: PHP: <?php class B extends A { function bar() { parent::bar(); // это правильно, хотя обращаемся к НЕстатическому методу } } но это исключения, которые надо выучить. а так - :: применимо только к тому, что объявлено как static