Pasare array la o metoda inexistenta

PEAR, Smarty, ADOdb, OOP, PHP 5, XML, UML, Şabloane de proiectare, PHP-GTK.

Moderatori: coditza, Emil, Moderatori

Costel00
New Member
Mesaje: 2
Membru din: Mie Iun 08, 2016 4:18 pm

Pasare array la o metoda inexistenta

Mesajde Costel00 » Mie Iun 08, 2016 4:29 pm

Salut comunitate.

Vreau sa pasez un array, doar ca treaba e mai ciudata. Asadar am codul urmator:

Cod: Selectaţi tot

<?php

class Costel {
    private $method;

    private $object;

    private $array;

    public function execute()
    {
        $this->method = 'asd';

        $this->object = new 'orice obiect vreti voi';

        $this->array = [0,1,2,3,4,5];

        $this->object->{$this->method}; // Aici vreau sa pasez array-ul.
       
        // Cum fac ?
    }
}

Eu nu am nicio idee cum sa pasez parametrii catre aceea metoda.
Tin sa precizez ca in obiectul "object" nu exista de fapt metoda "asd", ci un __get() gestioneaza treaba.
Din acest motiv, call_user_func_array() nu functioneaza dand un warning: Warning: call_user_func_array() expects parameter 1 to be a valid callback, class '...' does not have a method 'asd' in .......

Multumesc.

// Rog un moderator sa puna un titlu mai sugestiv ca nu am idee.



takedown
Average Member
Mesaje: 153
Membru din: Joi Feb 07, 2013 8:50 pm
Contact:

Re: Pasare array la o metoda inexistenta

Mesajde takedown » Mie Iun 08, 2016 4:55 pm

Poti face ceva de genul:

Cod: Selectaţi tot


$this->method = 'asd';

$this->data = ['catalin', 'cata'];

$this->obiect->{this->method}($this->data);



Dupa cum ai zis, acesta metoda nu exista si folosesti metoda magica __get(), nu este bine. Poti sa folosesti metoda magic __call($method, $args); este facuta special pentru astfel de cazuri, cand vrei sa apelezi o metoda care nu exista, apelarea se face prin intermediul metodei __call($method, $args);


Exemplu:

Cod: Selectaţi tot


class MyClass
{   
    public function __call($method, $args)
    {
        echo "Ai apelat metoda {$method}" . implode(', ', $args);
    }
}

$myClass = new MyClass();

$myClass->test(['catalin', 'cata']);



Metoda magica __get($name) se foloseste in cazul in care vrei sa preiei valorea unei proprietati care nu exista, te folosesti de o matrice etc.
Metoda magica __set($name, $value) se foloseste in cazul in care vrei sa setezi o proprietate si o valoarea pentru aceasta proprietate, dar atentie, aceasta proprietate nu exista, de obicei te foloseste tot de o matrice.

Despre __call() am discutat, mai este si __callStatic() pentru metode statice.

Gasesti aici mai multe: http://php.net/manual/ro/language.oop5.overloading.php#object.get
Ultima oară modificat Mie Iun 08, 2016 5:10 pm de către takedown, modificat de 5 ori în total.

Costel00
New Member
Mesaje: 2
Membru din: Mie Iun 08, 2016 4:18 pm

Re: Pasare array la o metoda inexistenta

Mesajde Costel00 » Mie Iun 08, 2016 5:02 pm

Mdeah.... sunt bolovan. Cand esti racit nici creieul nu merge (nu ma intreba cum am reusit in Iunie asta).
Cum sa folosesti get pentru methods ? :))) Stiam eu ca imi scapa ceva ca nu era un task greu.

Thank you very much.


Înapoi la “PHP Avansat”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 36 vizitatori