PHP çağırma işlevi denir değil

2 Cevap php

Ben aşağıdaki kodu var:

function failureCallback($host, $port) {
    print "memcache '$host:$port' failed";
}

$this->memcache = new Memcache;

## bool Memcache::addServer  (  string $host  [,  int $port = 11211  [,  bool $persistent  [,  int $weight  [,  int $timeout  [,  int $retry_interval  [,  bool $status  [,  callback $failure_callback  [,  int $timeoutms  ]]]]]]]] )
 $this->memcache->addServer('192.168.1.35', '11211', FALSE, 50, 10, 10, TRUE, 'failureCallback' );

Sunucu online ve (verified!) çalışan, ama Arıza geri çağırma işlevi her bağlantı denir ediliyor. Neden ki?

Referans:

PHP documentation: Memcache :: addServer -> failure_callback

Allows the user to specify a callback function to run upon encountering an error. The callback is run before failover is attempted. The function takes two parameters, the hostname and port of the failed server

Edit: geri arama işlevi önce, ancak herhangi bir şans olmadan parametrelerin doğru sayısı ile Güncel sonrası: (

2 Cevap

http://docs.php.net/memcache.addserver diyor ki:

Memcache::addServer
[...]
When using this method (as opposed to Memcache::connect() and Memcache::pconnect()) the network connection is not established until actually needed.
class Foo {
  protected $memcache;

  public function __construct() {
    echo "Foo::construct\n";
    $this->memcache = new Memcache;
    echo "  adding server\n";
    $this->memcache->addServer('127.0.0.1', 11211, false, 50, 5, 5, true, array($this, 'failureCallback'));
    echo "  constructor done\n";
  }

  public function bar($value) {
    echo "Foo::bar($value)\n";
    $b = $this->memcache->add('testkey', $value, false, 5);
    echo '  add() returned ', $b ? 'true':'false', "\n";
  }

  public function failureCallback($host, $port) {
    echo " ( Foo::failureCallback: memcache '$host:$port' failed )\n";
  }
}

$foo = new Foo;
$foo->bar(1);

baskılar (hiçbir memcached localhost üzerinde çalışan)

Foo::construct
  adding server
  constructor done
Foo::bar(1)
 ( Foo::failureCallback: memcache '127.0.0.1:11211' failed )
  add() returned false

Kod çalışmıyor nedeni aslında bir geri arama geçen verilmemektedir. Sadece bu işlevi çağıran ve dönüş değerini geçiyoruz. PHP bir arama genellikle işlev adı ile bir dize ya da nesne yöntemleri için bir dizi ya da olduğunu.

$this->memcache->addServer('192.168.1.35', '11211', 0, 50, 10, TRUE, array($this, '_call_memecache_failure');

Parametreler fonksiyonu tarafından kabul edilmelidir. Sen callbacks in the documentation PHP nasıl çalıştığı hakkında daha fazla bilgi edinebilirsiniz

(Docs) Örnekler:

<?php 

// An example callback function
function my_callback_function() {
    echo 'hello world!';
}

// An example callback method
class MyClass {
    static function myCallbackMethod() {
        echo 'Hello World!';
    }
}

// Type 1: Simple callback
call_user_func('my_callback_function'); 

// Type 2: Static class method call
call_user_func(array('MyClass', 'myCallbackMethod')); 

// Type 3: Object method call
$obj = new MyClass();
call_user_func(array($obj, 'myCallbackMethod'));

// Type 4: Static class method call (As of PHP 5.2.3)
call_user_func('MyClass::myCallbackMethod');

// Type 5: Relative static class method call (As of PHP 5.3.0)
class A {
    public static function who() {
        echo "A\n";
    }
}

class B extends A {
    public static function who() {
        echo "B\n";
    }
}

call_user_func(array('B', 'parent::who')); // A
?>