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
Форумы портала PHP.SU :: Версия для печати :: Вызов метада класса #1 в классе #2
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Вызов метада класса #1 в классе #2

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

1. etoYA - 11 Февраля, 2012 - 03:34:40 - перейти к сообщению
к примеру

PHP:
скопировать код в буфер обмена
  1. class A {
  2.     /*
  3.     свойства
  4.    */
  5.  
  6.      function aa($m) {
  7.         echo $m;
  8.      }
  9. }
  10. $a = new A();
  11. $a->aa('Hello World');
  12. class B {
  13.     /*
  14.     свойства
  15.    */
  16.  
  17.      function getAA() {
  18.        //как тут вызвать метод aa() класса A?
  19. }
  20. $b = new B();
2. Зверь - 11 Февраля, 2012 - 09:06:05 - перейти к сообщению
Так
PHP:
скопировать код в буфер обмена
  1. class A {
  2.     /*
  3.     свойства
  4.    */
  5.  
  6.      function aa($m) {
  7.         echo $m;
  8.      }
  9. }
  10. $a = new A();
  11. $a->aa('Hello World');
  12. class B {
  13.     /*
  14.     свойства
  15.    */
  16.  
  17.      function getAA() {
  18.        $a = new A;
  19.        $a->aa();
  20.        //как тут вызвать метод aa() класса A?
  21. }
  22. $b = new B();

Или так
PHP:
скопировать код в буфер обмена
  1. class A {
  2.     /*
  3.     свойства
  4.    */
  5.  
  6.    public static  function aa($m) {
  7.         echo $m;
  8.      }
  9. }
  10. A::aa('Hello World');
  11. class B {
  12.     /*
  13.     свойства
  14.    */
  15.  
  16.      function getAA() {
  17.       A::aa();
  18. }
  19. $b = new B();

И еще вот так
PHP:
скопировать код в буфер обмена
  1. class A {
  2.     /*
  3.     свойства
  4.    */
  5.  
  6.      function aa($m) {
  7.         echo $m;
  8.      }
  9. }
  10. $a = new A();
  11. $a->aa('Hello World');
  12. class B extends A{
  13.     /*
  14.     свойства
  15.    */
  16.  
  17.      function getAA() {
  18.        $this->aa();
  19. }
  20. $b = new B();
3. snikers987 - 11 Февраля, 2012 - 13:49:22 - перейти к сообщению
etoYA почитай про наследование
4. etoYA - 13 Февраля, 2012 - 02:21:36 - перейти к сообщению
snikers987, про это читал, но тогда получается, что
есть к примеру класс - MySQL, т.е. все классы, которые будут работать с базой, должны наследоватся от MySQL?
5. Okula - 13 Февраля, 2012 - 07:43:16 - перейти к сообщению
Зачем, можно в метод передать ссылку на объект класса MySQL
PHP:
скопировать код в буфер обмена
  1. class MySQL {
  2.     // методы и свойства...
  3. }
  4.  
  5. class A {
  6.    
  7.     public function show(MySQL &$db, $sql) {
  8.         $result = $db->query($sql);
  9.         while($inf = $db->fetch($result)) {
  10.             // вывод элементов
  11.         }
  12.     }
  13.    
  14. }
  15.  
  16. $db = new MySQL();
  17. // ....
  18.  
  19. $obj = new A();
  20. $obj->show($db, "SELECT * FROM `table`");
6. etoYA - 13 Февраля, 2012 - 08:23:33 - перейти к сообщению
Okula, спасибо.

А как вообще, ну к примеру вот классы:

MySQL.class.php
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. if (!defined('ARENA')) die('Hacking attempt');
  4. class MySQL {
  5.         private $link;
  6.         private $query;
  7.        
  8.         const HOST = 'localhost';
  9.         const LOGIN = 'root';
  10.         const PASS = '';
  11.         const DB = 'db';
  12.        
  13.         function connect() {
  14.                 $this->link = mysql_connect(self::HOST, self::LOGIN, self::PASS);
  15.                 mysql_select_db(self::DB);
  16.         }
  17.         function query($sql) {
  18.                 if (!$this->link) return false;
  19.                 $this->query = @mysql_query($sql);
  20.         }
  21.         function fetch_assoc() {
  22.                 if (!$this->query) return false;
  23.                 return mysql_fetch_assoc($this->query);
  24.         }
  25.         function error() {
  26.                 echo mysql_error();
  27.         }
  28.         function close() {
  29.                 if (!$this->link) return false;
  30.                 mysql_close($this->link);
  31.         }
  32. }
  33. ?>
  34.  

Pages.class.php
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. if (!defined('ARENA')) die('Hacking attempt');
  4. class Pages {
  5.         public $title;
  6.         public $content;
  7.         public $access;
  8.        
  9.         function create() {
  10.                 // тут подключение к базе и создание странички...
  11.         }
  12.             // остальные методы в том же духе
  13. }
  14. ?>
  15.  

class.php - инклудится в главную страницу

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?
  3. if (!defined('ARENA')) die('Hacking attempt');
  4. function __autoload($name) {
  5.         @require($name.'.class.php');
  6. }
  7. $db = new MySQL(); // получается тут (незнаю как это наз-ся), пусть будет подключать класс?
  8. ?>
  9.  
7. Okula - 13 Февраля, 2012 - 08:42:09 - перейти к сообщению
Просто входным параметром укажи ссылку на объект класса MySQL:
PHP:
скопировать код в буфер обмена
  1. <?
  2.  
  3. if (!defined('ARENA')) die('Hacking attempt');
  4. class Pages {
  5.  
  6.         public $title;
  7.         public $content;
  8.         public $access;
  9.  
  10.         function create(MySQL &$db) {
  11.                 // тут подключение к базе и создание странички...
  12.                 // теперь ты можешь использовать переменную $db в методе так же как и вне класса
  13.         }
  14.             // остальные методы в том же духе
  15. }
  16.  
  17. ?>

Ну и собственно твой вывод:
PHP:
скопировать код в буфер обмена
  1. <?
  2. if (!defined('ARENA')) die('Hacking attempt');
  3. function __autoload($name) {
  4.         @require($name.'.class.php');
  5. }
  6. $db = new MySQL(); // получается тут (незнаю как это наз-ся), пусть будет подключать класс?
  7. $pages = new Pages();
  8. $pages->create($db);
  9. ?>

В работе с базой не стоит плодить подключения.
8. etoYA - 13 Февраля, 2012 - 08:50:16 - перейти к сообщению
Okula, вывод всего(страниц,пользователей) в странице с __autoload?
9. snikers987 - 13 Февраля, 2012 - 09:04:23 - перейти к сообщению
etoYA пишет:
Okula, вывод всего(страниц,пользователей) в странице с __autoload?

Используй шаблон синглтон для класса бд.
php.net/manual/ru/language.oop5. patterns.php
10. etoYA - 13 Февраля, 2012 - 18:01:39 - перейти к сообщению
Okula, толи я не разобрался, толи не работает, в общем, ткни носом)).

index.php (Отобразить)

class.php (Отобразить)

MySQL.class.php (Отобразить)

Pages.class.php (Отобразить)
11. Okula - 13 Февраля, 2012 - 18:07:38 - перейти к сообщению
Зачем ты в методе create() вызываешь опять подключение? ( $db->connect(); )
Ты же передаёшь ссылку на объект с классом MySQL в котором уже установленно подключение.
12. etoYA - 13 Февраля, 2012 - 19:47:06 - перейти к сообщению
Okula, вот видишь, не понял))). Спасиб

И еще, вот я начал учить ООП, и сразу хочу написать сайт(ну типо цмс для себя).
Пока написал, точнее начертал класс MySQL, больше ничего нету, с чего начать, что вообще делать?
(Добавление)
Все равно не работает).Класс через __autoload не подключается

CODE (htmlphp):
скопировать код в буфер обмена
  1. Parse error: syntax error, unexpected T_STRING, expecting T_VARIABLE in Z:\home\arena\www\engine\classes\Pages.class.php on line 9

(Добавление)
Ааааа... тю.. было так MySQL &db, а ведь знак доллара забыл))
13. sKaa - 13 Февраля, 2012 - 20:06:37 - перейти к сообщению
etoYA а ты в курсе че это за знак доллара и зачем он нужен в пхп?
14. etoYA - 13 Февраля, 2012 - 20:11:58 - перейти к сообщению
sKaa, нет офк, но догадываюсь... Думаю, что тоже что и в жизни - это такая валюта, не?
15. sKaa - 13 Февраля, 2012 - 20:24:37 - перейти к сообщению
etoYA, если это сейчас проявление сарказма было - в этот раз съязвить не удалось Недовольство, огорчение. Впрочем я так и думал, ты не в курсе, что можно передавать не скалярные величины по ссылке иначе ты бы попытался возразить мне, что ты уже всё знаешь про символ "&"

 

Powered by ExBB FM 1.0 RC1