Ben önce kullanılan nesneleri almak miyim?

6 Cevap php

Is there any way I can persist objects in PHP? I am creating some objects in a script, but I have to create them everytime the script is run (losing their state unless I save it to DB).

Ben değişkenleri $ _SESSION küresel ile kalıcı olabilir biliyorum, ama ben nesneleri kaydetmek gerekir?

Nesne Persistance mümkün değilse, PHP OOP ne faydası var?

6 Cevap

Nesne kalıcılığı mümkün, ancak otomatik olarak verilmemektedir. Bunu kendiniz yazmak gerekir, ya da sizin için yapar bir nesne katmanı kullanmak ya. Yani muhtemelen bir veritabanı gerekir.

PHP program zaman içinde birden fazla sayfa isteklerine yanıt veren bir ortam değildir: onun yerine, program bir sayfa isteğine yanıt çağrılan ve bittiğinde sonlanır.

PHP nesne yönelimli kod amacı mümkün programlama algoritmaları ve stilleri bir sal yapmak yapmak için, ve daha kolay çözümler kodlama daha da büyük bir dizi yapmak yapmaktır. Evet, örneği ve tek bir sayfa çağrı içinde yok, böylece bu paradigma içinde çalışmak zorunda olan. Birçok codebases sayfalar arasında veya oturumları etrafında nesne kimlikleri geçmek; kısa sürede gelen nesneyi ihtiyaç olarak, bu örneği ve bu kimliği kullanarak kalıcı depolama yüklenir. İyi bir nesne katmanı bu kolay yapacaktır.

Eğer oturumda saklayın önce nesneyi serialize:

$s_obj = serialize($myObj);
$_SESSION['myObj'] = $s_obj;

ve daha sonra, almak ve onu yeniden:

$s_obj = $_SESSION['myObj'];
$myObj = unserialize($s_obj);

Nesneleri seri hale getirmek gerek yoktur:

<?php

class A
{
    protected $name;
    public function __construct($name) { $this->name = $name; }
    public function getName() { return $this->name; }
}

session_start();

if (isset($_SESSION['obj'])) {
    die( $_SESSION['obj']->getName() );
} 

$_SESSION['obj'] = new A('name');

?>

Agree with jcinacio, no need to serialize values before inserting into $_SESSION.. php will manage serialize/unserialize for you on each page request/end.

Nesneler / oturumları devam için başka bir yol php davranışı "taklit", dosya / veritabanı onları kurtarmaktır. Bu durumda dizelerine dönüştürmek değerleri serialize gerekiyor, ve bir kez itiraz onları geri dönüştürmek için veritabanından alınan onları unserialize edeceğiz.

Ayrıca __ uyku ilginizi çekebilir ve __ wakeup "Sihirli Yöntemler" [0] nesnesinin Kaydetmek için gidiyoruz. Nesneyi unserializing / seri hale getirilirken Bu yöntemler vb, bir veritabanından açma / kapama gibi bir eylemi gerçekleştirmek için, denir

[0] http://php.net/oop5.magic

Lütfen devlet gerçekten çeşitli kullanıcılar arasında paylaşılan ise, $ _SESSION kullanmak istemiyorum unutmayın. $ _SESSION same user oturumda kullanılabilir - seferde sitede 50 kullanıcı varsa, bunların her biri en az bir kez hesaplama ceza ödemek zorunda kalacak yani.

Bu durumda, kalıcı bir disk tabanlı on bellek (memcache) önbelleği kullanmak isteyebilirsiniz.

APC http://www.php.net/apc/ gibi bir önbellek deneyin