Mümkün yansıma kullanarak bir nesne örneği yöntemlerini değiştirmek için mi

2 Cevap php

What I'm trying to do is create a domain model with a Plain Old PHP Object. The I'm creating a library which will do all the infrastructure stuff. So one of my models looks like this

class Project {
  public $id;
  public $name;
  public $typeId;

  private $type;

  public function getType() {
    return $this->type;
  }

  public function setType(Type $type) {
    $this->typeId = $type->id;
    $this->type = $type;
  }
}

Şimdi eğer geçerli bir Type nesne ile yeni bir proje ve çağrı setType oluşturmak ve proje ve tipi kaydedilir hem ORM kullanarak proje örneğini kaydedin. Ama sonra Projesi yüklemek ve ben ORM persitence gelen nesne yüklemek için şeffaf bu yöntemi modifiye etmiş istiyorum getType yöntemini kullanın. Yani burada bu yöntem:

public function getType() {
  return $this->type;
}

: şeffaf olarak değiştirilmiştir

public function getType() {
  if (is_null($this->type) {
    $this->type = $this->adapter->findById('table', $this->typeId);
  }

  return $this->type; // or return parent::getType();
}

Outlet PHP Project_Proxy denilen Projesi için bir proxy sınıf oluşturmak için eval kullanır ama bazen bu yüzden bir yol olup olmadığını Reflection API kullanarak bir çözüm arıyorum Projesi'nin alt sınıfları olacaktır.

Ben bir yöntem davranışını değiştirmek için arama google var ama yine de bulamadım

Edit: ya da proxy benim modeller için Sınıflar ve hepsini alt sınıflarını yaratmak için Outlet PHP'nin eval yöntemi kullanmak iyi bir fikir olurdu?

2 Cevap

Bunu yapmanın hiçbir yerleşik bir yolu yoktur. Ve kullanarak PECL extension called runkit, şiddetle başka bir çözüm bulma öneriyoruz yapabilirsiniz rağmen. Eğer anything bilmem işlevler uygulanmasını değiştirmek çok tehlikelidir ve bu gibi tek bir hata ayıklama {[için if (is_null(... ifadeleri (yazarken daha uzun sürebilir hataların neden olabilir 3)]} sizin fonksiyonları.

BTW: Eğer tekrar tekrar veritabanından boş değerleri almak olabilir çünkü, is_null() kullanmayın. Sen ayrı bir değişken olarak getirilen değerleri saklamak gerekir.

Yansıması baktığımızda doc php.net üzerine, o uçuşta bir yöntem üzerinde değişiklik yapmak mümkün değildir bana görünür.

Farklı bir şekilde yapmaya çalışmalısınız.