Ben yöntemi sabittir kullanmalı mıyım PHP bir kayıt deseni ile çağırır?

3 Cevap php

Sitemde birçok sınıf dosyaları içinde de dahil olmak üzere, birçok sayfadan ulaşılabilir gereken birçok ayarlara sahip bir config dosyası var. Config dosyası her sayfa yapı başlığına dahil edilir. Ben bazı nesneleri saklamak için bir kayıt yöntemi kullanıyor olacak beri tüm diğer nesneler için kullanılabilir olacak beri bana iyi bu sınıf eşek bazı ayarını saklamak için daha iyi olurdu, merak ediyorum? Son birkaç gün içinde benim deneyim, benim sınıf dosyaları içinde sabitleri erişen bazen zor görünüyor. Ben sadece o ayarlarını ve almak için çeşitli yöntemler aramak gerekir gibi iyi bir fikir olurdu emin değilim. Bir kayıt defteri türü nesnesi ayarları depolamak için yaygın bir uygulama mı? Ben onlar ayarlarını almak / ayarlamak için yerinde yöntemleri var bazı büyük projelerde gördük ama gerçekten eylem görmedim.

3 Cevap

PHP sabitleri önlemek, onlar untestable yapmak. Bu benim tercih edilen çözümün özü olduğunu:

. whatever ini:

<?php

return array(
  'setting-1' => 'value',
  'setting-2' => 'another value',
);

config.php:

class config
{
  public function __construct($path)
  {
    $this->cfg = include $path;
  }
  private $cfg;
  public function get($key, $default)
  {
    return array_key_exists($this->cfg, $key)
      ? $this->cfg[$key]
      : $default
    ;
  }
}

index.php:

$cfg = new config('my.ini');

...

Ben bazı tür bir kayıt defterinde bu gibi şeyleri tutmak istiyorum. Bu benim için çünkü rağmen

  1. the majority of my configuration values are actually multiple parts (ie arrays) so to map much of this out using constants would get pretty long winded. Additionally i dont use php for my config files i always use XML or YAML which is then parsed any way so it jsut makes more sense to go ahead and stick them in a registry as opposed to using constant or globals.
  2. It allows for a single api to get these type of values whther its a db connection object or the path to the webroot on the filesystem

I gerçekten değerlerin ne bağlıdır ve bunları nasıl kullanmak niyetinde ve eğer yapı ya da aslında düz olduğunu düşünüyorum dedi.

Ben iki yaklaşımın bir arada kullanın:

1: her sınıf / kontrolör olarak, ben her zaman gibi bir kod var olduğu bir Require_oncenin ('app_config.php') ile başlar:

('APP_SMTP_SERVER', 'mail.company.com') tanımlamak;

Sonra bir sabiti olarak başvuruda bulunabilir ki.

2: Ben anahtarlarını ve değerlerini saklayabilirsiniz bir tek "Kayıt Defteri" dersim var. İki maruz yöntemleri, getAttribute ($ key) ve setAttribute ($ key, $ değer) vardır. Ben veritabanına kaydetmek, ben değer getirmek, bu nedenle bunu (tek değerler veya dizileri vb) atmak herhangi bir veri türünü saklayabilir.