ne olursa olsun GET veya POST tek bir nesne haline dış değişkenleri harmanlama için php fonksiyonu

4 Cevap php

Bir keresinde başkasının PHP kodu gözden hatırlamak ve o zaman etrafında geçti olabilir, tek bir düz eski nesne içine tüm GET ve POST değişkenleri haddelenmiş bir işlev veya sınıf yöntemi vardı. Aynı ad-değer çifti hem GET ve POST çıktı varsa, POST kazanacaktı.

Bir iyi kodlu PHP var mı add-on var bu tam olarak yapar herhangi bir tür?

4 Cevap

Sen, $_REQUEST , but be aware that it contains the contents of $_GET $_POST ve $_COOKIE kullanmak, ve olabilir bu değişkenlerin (amaçları üzerine yazma ve sipariş) varlığı süper küresel yürütme ortamında yapılandırmaya tabidir.

Bu sorunlara neden ise, basit bir sürümünü rulo için iyi bir fikir olabilir, bir dönüm noktası gibi bir şey olurdu

$requestData = array_merge( $_GET, $_POST );

O zaman belki, örneğin, ilave yararlı işlevsellik sağlayarak, bazı moda bu işi halledebiliriz otomatik olarak eksik değişkenler vs için varsayılan değerleri veren, stripslashes() magic_quotes ile karıştırılmış değerlere uygulanması

Sen kesinlikle onun değerlerin kaynağını tespit edemez hem değişkenleri birleştirme (ya da bunun yerine $_REQUEST veya Register Globals kullanarak) güvenlik açıkları neden olabilir. Erişirken değeri URL'ye POST vücut veya Cookie ile gönderildi Yani eğer $_REQUEST['foobar'] söyleyemem. Bu Cross-Site Request Forgery için Script savunmasız yapabilirsiniz.

Bu yüzden konfor üzerinde güvenlik için gidin ve size değerleri gelen beklediğiniz bu değişkenleri kullanmanızı öneririz. $_GET URL tarafından kabul edilmesi bekleniyor argümanlar için, $_POST kurabiye için POST ve $_COOKIE üzerinden geçti olanlar için.

Ben kötü bir uygulamadır $_POST ile $_GET conflate düşünecektim. Bunlar tamamen farklı şeyler içindir, ve eşit olarak onları tedavi ederek, etkili bir HTTP protokolünü kötüye vardır. Belirtildiği gibi, $_REQUEST ne isterseniz onu yapar, ama biraz önceden kestirilemez. Kolayca aynı yapmak için kendi küresel fonksiyon yazabiliriz:

function param($name, $default = null) {
  return isset($_POST[$name])
    ? $_POST[$name]
    : (isset($_GET[$name])
      ? $_GET[$name] 
      : $default);
}

Ama gerçekten .. bu kötü bir uygulamadır.

Bu uygulama boyunca küresellerle kolları benim çerçevesinden sınıftır. Değişkenlerin hiçbir işlem yapılmamaktadır.

class stGlobal

{

//instance
private static $instance;

//global settings
public $post = '';
public $get = '';
public $files = '';
public $request = '';

private function initialize()
{
	$this->post = $_POST;
	$this->get = $_GET;
	$this->files = $_FILES;
	$this->request = $_REQUEST;
}

public function getInstance()
{
	if (!isset(self::$instance))
	{
		$class = __CLASS__;
		self::$instance = new $class();
		self::$instance->initialize();
	}
	return self::$instance;
}

}

Her yerde kullanmak için

$myObj = stGlobal::getInstance();