PHP sınıfı dışındaki değişkenleri tanımlayın

3 Cevap php

Ben zend kullanıyorum.

Ben denetleyici sınıfın dışında aşağıdaki kodu tanımlamak istiyorum & Farklı Eylemler erişimi.

$user = new Zend_Session_Namespace('user');
$logInArray = array();
$logInArray['userId'] = $user->userid;
$logInArray['orgId'] = $user->authOrgId;

class VerifierController extends SystemadminController
{
 public function indexAction()
    {
        // action body
        print_r($logInArray);  
    }
}

Ama bu sınıf dışında bu dizi göstermek diğer taraftan endeksi işlevi bu diziyi yazmıyor.

How it is possible. Thanks.

3 Cevap

Bir yöntem / işlev içinde global bir değişken erişmek için, yöntem / işlevi içinde, global olarak beyan etmek zorunda:

class VerifierController extends SystemadminController
{
 public function indexAction()
    {
        global $logInArray;
        // action body
        print_r($logInArray);  
    }
}


In the manual, see the section about Variable scope.


Still, note that using global variables is not quite a good practice : in this case, your class is not independant anymore : it relies on the presence, and correct definition, of an external variable -- which is bad.

Belki bir çözelti olacaktır:

  • yönteme bir parametre olarak bu değişken geçmek?
  • ya da sınıfın kurucusuna onu geçmek, ve bir özellik depolamak?
  • Eğer kurucu değiştiremezsiniz ya da eğer, bu değişken alacak bir yöntem eklemek, ve bir özellik depolamak?

print_r ($ GLOBALS ['logInArray']);

http://php.net/manual/en/reserved.variables.globals.php

Birçok yönden kullanıcıyı depolamak ve daha temiz bir şekilde erişebilirsiniz. Siz Zend_Registry depolamak ve daha sonra Zend_Registry kullanabilirsiniz :: ('kullanıcı') olsun size kullanıcı almak için gereken yere yapabilirsiniz. Ayrıca istek nesnenin bir parametre olarak depolamak ve daha sonra bir denetleyicisi sadece yapmak $ user = $ this-> _getParam ('kullanıcı') olabilir;

Eğer SystemadminController devralan birçok denetleyicileri kullanıcı dizi erişim gerekiyorsa, ne yapabilirim bunu SystemadminController (örn. korumalı $ _User) bir korunan mülkiyet olarak saklamak değildir. Sonra çocuk denetleyicileri tüm yapmanız gereken bu-> _User erişim $ 'dır.