PHP: как сделать метод внутри класса запустить? - PullRequest
1 голос
/ 28 декабря 2011

Я начал изучать oop php, и я не понимаю, как заставить метод внутри класса выполняться. Это код:

class GrabData {
public $tables=array();
public $columns=array();
public $argList;


function __construct(){
    $this->argList=func_get_args();
    $pattern;
    var_dump($this->argList);
    if(!empty($this->argList)){

        foreach($this->argList as $value){
            if(preg_match("/.+_data/",$value,$matches)){
                if(!in_array($matches[0],$this->tables)){
                    array_push($this->tables,$matches[0]);
                    var_dump($this->tables);
                }
                $pattern="/". $matches[0] . "_" . "/";
                array_push($this->columns,preg_replace($pattern,"",$value));
                var_dump($this->columns);
            }

        }
    }
}

public function gen_query(){
    var_dump($this->argList);
    echo "haha";
}

    gen_query();
}

new GrabData("apt_data_aptname");

Теперь функция __construct запускается, когда я создаю новый объект GrabData, но функция gen_query не выполняется. Как мне заставить его выполнить это?

Ответы [ 3 ]

2 голосов
/ 28 декабря 2011

Если вы всегда хотите, чтобы при запуске класса выполнялась функция gen_query, вы можете ссылаться на нее в нижней части конструктора, например:

1 голос
/ 28 декабря 2011

Сначала вы назначаете объект, возвращаемый оператором new, переменной, а затем используете эту переменную для выполнения методов на вашем объекте:

class GrabData {
    public $tables=array();
    public $columns=array();
    public $argList;

    function __construct() {
        $this->argList=func_get_args();
        $pattern;
        var_dump($this->argList);
        if(!empty($this->argList)){
            foreach($this->argList as $value){
                if(preg_match("/.+_data/",$value,$matches)){
                    if(!in_array($matches[0],$this->tables)){
                        array_push($this->tables,$matches[0]);
                        var_dump($this->tables);
                    }
                    $pattern="/". $matches[0] . "_" . "/";
                    array_push($this->columns,preg_replace($pattern,"",$value));
                    var_dump($this->columns);
                }

            }
        }
    }

    public function gen_query() {
        var_dump($this->argList);
        echo "haha";
    }
}

$super_object = new GrabData("apt_data_aptname");
$super_object->gen_query();
0 голосов
/ 28 декабря 2011

Другой способ запустить функцию класса без инициализации класса - использовать оператор разрешения области действия с двойным двоеточием, который странным образом называется «Paamayim Nekudotayim».

GrabData::gen_query();

Вы можете прочитать об этом здесь .

...