ФорумПрограммированиеPHP для идиотов → Вызов preg_replace внутри класса. Help.

Вызов preg_replace внутри класса. Help.

  • sneakyfildy

    Сообщения: 9 Репутация: N Группа: Кто попало

    Spritz 16 декабря 2010 г. 19:50

    Привет.
    Прошу помощи :-) Можно пинать ногами и посылать в гугл, в котором я уже смотрел.
    Я нуб, начал пейсать недавно, по профессии работаю с БД, владею т-скулем. А вот php совершенно не владею.
    Ситуация такая: есть некий класс myClass в подключаемом файле.php
    В этом классе описан protected массив $array и public function pfunc($arg1,$arg2) (одна) внутри нее происходит вызов функции preg_replace, которая оперирует содержимым массива (насколько я знаю - стандартная регэксповая функция).
    При вызове pfunc() вываливается ошибка:

    Fatal error: Call to undefined method myClass::preg_replace() in /home/www/public_html/test.ru/www/external.php on line 73

    Функция вызывается так:

    $p = new myClass;
    $p = $p->pfunc('kiss','my shiny metal ass');

    Помогите, пожалуйста. Почему изнутри класса нельзя вызвать прег_реплейс.
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz 16 декабря 2010 г. 20:15, спустя 25 минут 26 секунд

    код на бочку
    не всё полезно, что в swap полезло
  • sneakyfildy

    Сообщения: 9 Репутация: N Группа: Кто попало

    Spritz 16 декабря 2010 г. 20:32, спустя 17 минут 1 секунду

    Откуда вызывается функция:

    <?php
    require 'external.php';
    $p = new MyClass;
    if(isset($_POST['input'])) {
    $p = $p->funcp($_POST['input']);
    var_dump($p);
    }
    ?>


    external.php:


    <?php
    class myClass {
    protected $_preg = array(
    'mail.ru' => array (
    'pattern' => '/(.*?)@(mail|list|bk|inbox).ru/i',
    'replacement' => 'http://$1.id.$2.ru'
    )
    );

    public function funcp ($arg) {
    case isset ($this->_preg[$arg]):
    return $this->preg_replace($_preg[$arg]['pattern'], $_preg[$arg][' replacement'], $_replace[$arg]);
    default:
    return false;
    }
    }


  • sneakyfildy

    Сообщения: 9 Репутация: N Группа: Кто попало

    Spritz 16 декабря 2010 г. 20:40, спустя 7 минут 26 секунд

    мне кажется я какую-то херню написал по памяти :(
    не могу ребутнуться в бубен, потому что жена малахова смотрит (тв-тюнер вместо телика)
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz 16 декабря 2010 г. 20:42, спустя 2 минуты 23 секунды

    ага, херню
    http://www.php.net/manual/en/control-structures.switch.php
    не всё полезно, что в swap полезло
  • sneakyfildy

    Сообщения: 9 Репутация: N Группа: Кто попало

    Spritz 16 декабря 2010 г. 20:44, спустя 2 минуты 12 секунд


    ага, херню
    http://www.php.net/manual/en/control-structures.switch.php

    пасиба, почитаем :)
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 16 декабря 2010 г. 20:45, спустя 25 секунд

    - $this->preg_replace
    + preg_replace
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz 16 декабря 2010 г. 20:47, спустя 2 минуты 9 секунд

    - $this->preg_replace
    + preg_replace

    внатуре
    не всё полезно, что в swap полезло
  • sneakyfildy

    Сообщения: 9 Репутация: N Группа: Кто попало

    Spritz 16 декабря 2010 г. 21:18, спустя 31 минуту 11 секунд

    ОТСПАСИБА!!!
  • sneakyfildy

    Сообщения: 9 Репутация: N Группа: Кто попало

    Spritz 17 декабря 2010 г. 20:15, спустя 22 часа 56 минут 55 секунд

    Не получается :( Прошу помощи еще раз.
    Я постарался быть радивым учеником и стал читать раздел учебника про классы в пхп.
    Прочитал, стал пробовать сделать функцию с вызовом preg_replace изнутри классовой функции. Не получается.
    Ниже код, если в нем строку
    $name=preg_replace($pattern, $replacement, $name);
    поменять на
    $namе->preg_replace($pattern, $replacement, $name);
    то изменится только ошибка, в случае с = пхп ругается на пустую регулярку (видимо не видит переменные паттерн и реплейсмент (Warning: preg_replace() [function.preg-replace]: Empty regular expression),
    а в случае с -> говорит, что
    Fatal error: Call to a member function preg_replace() on a non-object in Z:\home\test2.ru\www\lesson.php on line 21

    То ли неправильно вызывается прег_реплейс, то ли неправильно обьявлены переменные/функции, не могу понять.

    <?php

    class human {
    protected $name;
    var $addr;
    protected $pattern = '/A/';
    protected $replacement = 'Shma';

    function Name() {
    echo "<h3>John</h3>";
    }
    public function setname ($nname){
    if (!$name){
    $name='Default human name';
    }
    echo "Old name: $name <br /> \n";
    $name = $nname;
    echo "New name: $name <br /> \n";
    }
    public function pname (){
    $name=preg_replace($pattern, $replacement, $name);
    echo "Converted name: $name <br /> \n";
    }
    }


    $o = new human;
    $o->setname('Alex');
    $o->pname();
    $b = 'Alex';
    //test
    echo "//test area <br /> \n";
    $pattern = "/A/";
    $replacement = "Shma";
    $b = preg_replace($pattern, $replacement, $b);
    echo "Test motherfucker! $b \n";
    ?>


    Заранее спасибо за помощь и терпение :)
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 17 декабря 2010 г. 20:21, спустя 5 минут 57 секунд

    читай дальше книгу
    Спустя 11 сек.
    просвет впереди
    Сапожник без сапог
  • sneakyfildy

    Сообщения: 9 Репутация: N Группа: Кто попало

    Spritz 17 декабря 2010 г. 20:24, спустя 3 минуты 4 секунды

    поняно :)
  • Trieg

    Сообщения: 41 Репутация: N Группа: Адекваты

    Spritz 17 декабря 2010 г. 20:28, спустя 3 минуты 41 секунду

    protected $name;
    protected $pattern = '/A/';
    protected $replacement = 'Shma';

    не preg_replace($pattern, $replacement, $name); а preg_replace($this->pattern, $this->replacement, $this->name);

    и в public function setname не $name = $nname; а $this->name = $nname;

    $xxx ет *простые переменные* а $this->xxx ет *переменные класса*

    смысл уловил?
  • sneakyfildy

    Сообщения: 9 Репутация: N Группа: Кто попало

    Spritz 17 декабря 2010 г. 20:38, спустя 10 минут 45 секунд

    $this->name = $nname;


    Спасибо огромное :) Заработало. А главное кажется доперло.

    preg_replace($this->pattern, $this->replacement, $this->name);
    "сделай мне прег_реплейс с паттерном ЭТОГО КЛАССА, реплейсментом ЭТОГО КЛАССА и применительно к имени ЭТОГО КЛАССА…
    а он думал, что это за левые переменные такие, я их не знаю.
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 17 декабря 2010 г. 21:15, спустя 36 минут 26 секунд

    молодой человек, пиздуйте читать мануал, не нужно гадать на кофейной гуще и угадывать

Пожалуйста, авторизуйтесь, чтобы написать комментарий!