За последние 24 часа нас посетили 41713 программистов и 2583 робота. Сейчас ищут 732 программиста ...

как Получить имя объекта?

Тема в разделе "PHP для новичков", создана пользователем Yadfewm, 23 июн 2010.

  1. Yadfewm

    Yadfewm Активный пользователь

    С нами с:
    20 июл 2009
    Сообщения:
    223
    Симпатии:
    0
    Использую функцию array_walk($массив, "имя_функции").

    Раньше писал программы используя только функции (без ООП), небыло горя, а теперь необходимо как то так:
    Код (Text):
    1.  
    2. array_walk($barkey, "${this}->barkey");
    (К каждому элементу массива применить метод класса)

    Совсем не хочется делать так:
    Код (Text):
    1.  
    2. ...
    3. _construct($name) {
    4. $this->name = $name;
    5. ...
    6. }
    7. ...
    8. func .. lalal() {
    9. array_walk($barkey, "${this->name}->barkey");
    10. ...
    11. }
    Даже не пытался создавать это свойство (name) для объекта, считаю что объект и без этого свойства должен знать как его зовут. Да?
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    если вызывается изнутри класса, зачем брать this в скобочки? или без них не работает? о.О

    ЗЫ: и чем foraech плох?
     
  3. Yadfewm

    Yadfewm Активный пользователь

    С нами с:
    20 июл 2009
    Сообщения:
    223
    Симпатии:
    0
    Вызывается да, внутри класса. Я бы сказал: ВООБЩЕ не работает то что я пишу, я не знаю как указать имя метода! =( перепробовал:
    Код (Text):
    1. $this->."barkey"
    2. $this."->barkey"
    3. "${this}->barkey"
    и тупо даже:
    не сработало, хотя явно задал...
     
  4. Yadfewm

    Yadfewm Активный пользователь

    С нами с:
    20 июл 2009
    Сообщения:
    223
    Симпатии:
    0
    foreach ничем не плох, наверное вернусь на круги своя, просто хотел использовать огромные возможности PHP, а то весь движек str_replace, foreach )) ...
     
  5. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Если не ошибаюсь, то при указании метода как callback функции надо передавать массив из двух элементов: первый объект у которого вызывается метод, второй - имя метода (или имя класса и имя метода если метод статический). Посмотрите на php.net разные функции с callback, там должны быть примеры.
     
  6. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    У объекта иени нет. Имя есть у класса.
    PHP:
    1. <?php
    2. class a
    3. {
    4.     function b($val, $key) {
    5.         echo "$key=>$val";
    6.     }
    7.    
    8.     function c($arr) {
    9.         array_walk($arr, get_class($this).'::b');
    10.         return $arr;
    11.     }
    12. }
    13. $a = new a;
    14. $array = array(1,2,3,4,5);
    15. $a->c($array);
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    волшебник
     
  8. iliavlad

    iliavlad Активный пользователь

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    в данном случае наверное лучше
    array_walk($arr, 'self::b');
     
  9. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Так не работает, потому что array_walk - не член класса, у нее свой неймспейс.
     
  10. iliavlad

    iliavlad Активный пользователь

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    странно. у меня получилось.
     
  11. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Код (Text):
    1. Fatal error:  Cannot call method self::b() or method does not exist
    PHP 5.2.11

    еще можно так
    PHP:
    1. array_walk($arr, array($this, 'b'));
    и $this можно заменить на self, но при этом выпадет нотис.
     
  12. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    [vs]
    В PHP 5.3 можно вызывать методы типа "parent::b()". Если верить документации конечно. =))
     
  13. Yadfewm

    Yadfewm Активный пользователь

    С нами с:
    20 июл 2009
    Сообщения:
    223
    Симпатии:
    0
    А можете уточнить про "::"? Я новичек и как я понимаю это обозначает обращение к "Статическим" методам и свойствам (константам) класса. Тогда в коде выше нужно было:
    Спасибо всем пойду пробовать все ваши предложения, интересно же...
     
  14. Yadfewm

    Yadfewm Активный пользователь

    С нами с:
    20 июл 2009
    Сообщения:
    223
    Симпатии:
    0
    PHP Version 5.2.8, нотис не выпал, а почему должен?