php class function ->

2 Cevap php

I have a class 'abc', with several functions inside it: 'abc_function1' 'abc_function2' 'abc_function3' 'abc_function4' 'abc_function5'

Ben girmek bir parametreye göre sınıf 'abc' bir fonksiyonu çağırmak istiyorum, 'Function1' veya sınıfın ilgili fonksiyon başvurmak için, örneğin 'işlevi 4' içeren bir dize.

Kendimi açıkça yaptık umuyoruz ;)

Çok teşekkürler yardımınız için

2 Cevap

Ama neden bu bence belli bir kod kokusu vardır tam olarak emin değil. Ama yine de ...

Yöntem a): "sihirli" yöntemi uygulamak __call($name, $params).

<?php
class Foo {
  public function abc_function1() {
    echo "function #1";
  }

  public function abc_function2() {
    echo "function #2";
  }

  public function abc_function3() {
    echo "function #3";
  }

  public function __call($name, $params) {
    $fqn = 'abc_'.$name;
    if ( method_exists($this, $fqn) ) {
      call_user_func_array( array($this, $fqn), $params);
    }
  }
}

$f = new Foo;
$f->function2();

Metot b): sadece Automagical eşleme olmadan aynı fikir.

<?php
class Foo {
  public function abc_function1() {
    echo "function #1";
  }

  public function abc_function2() {
    echo "function #2";
  }

  public function abc_function3() {
    echo "function #3";
  }

  public function doSomething($x, $y, $z) {
    $fqn = 'abc_'.$x;
    if ( method_exists($this, $fqn) ) {
      call_user_func_array( array($this, $fqn), array($y, $z));
    }
  }
}

$f = new Foo;
$f->doSomething('function2', 1, 2);

Yöntem c) Eğer parametre numarasını biliyorsanız siz de kullanabilirsiniz

$this->$fqn($,y, $z)

yerine

call_user_func_array( (array($this, $fqn), array($y, $z) );

ayrıca bakınız: http://docs.php.net/call_user_func_array ve http://docs.php.net/functions.variable-functions

Sen PHP variable functions özelliğini kullanabilirsiniz:

function call_function( $string ) {
    $var = 'abc_' . $string;
    $retval = $var(); // this will call function named 'abc_'
                      // plus the contents of $string
    return $retval;
}