1

まず、問題を理解できるようにフローを示します。4 つのファイルがあり、そのうちの 3 つはクラスで、2 つの名前空間を使用しています。
login.php はフォームです。フォームが送信されると、それ自体に戻り、以下のコードが実行されます。login.php は、問題なく Zcrypt::Decrypt および Zcrypt::Encrypt を呼び出します。Login::DoLogin(); login.php ファイル内でも呼び出されます。

Login.class.php (DoLogin が存在する場所) ファイルで、DB の新しいインスタンスを作成し、エラーなしで Zcrypt::Decrypt を呼び出すことができます。Login.class.php では、dbConnect(); を呼び出します。

DB.class.php (dbConnect が存在する場所) ファイルで、Zcrypt::Decrypt を呼び出すことができません。構文エラーが表示されるか、Zcrypt が見つからないというメッセージが表示されます。Zcrypt::Decrypt([string])、\Zcrypt::Decrypt([string])、さらには \Zcrypt::Decrypt([string]) を試しました。

問題は、一部のクラスで Zcrypt を呼び出せるのに、他のクラスでは呼び出せないのはなぜですか? これが機能するためのコードが不足していますか?

ここに私のファイルがあります

login.php:

require 'NS/helpdesk/Login.class.php';
require 'NS/helpdesk/Cryptv2.class.php';
require 'NS/helpdesk/DB.class.php';
use \net\[domain]\Zcrypt;
use \net\[domain]\helpdesk\Login;

#check to see if the form was submited and that the values are equal.
{
if (strlen($_POST['hvalue']) > 1 && $_SERVER['REMOTE_ADDR'] == Zcrypt::Decrypt($_POST['hvalue']) )
{
        Login::DoLogin();  ###### This is where I call my static Login Class
}
else {
    echo "bad form";
}
}

Login.class.php

namespace net\[domain]\helpdesk;

use \net\[domain]\helpdesk\DB;
use \net\[domain]\Zcrypt;
class Login
{

    public function DoLogin()
    {
        #call to the database class to open the db
        $DB = new DB();
        $DB->dbConnect();

        #This is to show I can call Zcrypt in this class (note, no \) and it works.     
        echo $dbPass = Zcrypt::Decrypt("[coded string]");   
    }
}

DB.class.php

namespace net\[domain]\helpdesk;

use \net\[domain]\Zcrypt;

class DB
{

    public $dbHost = '[address]';
    public $dbUser = '[un]';
    public $dbPass = '[pw]';  
  ######The two commented out lines below will not run.  I get a syntax error
    # public $dbPass = \Zcrypt::Decrypt("[strint]"); 
    # public $dbPass = Zcrypt::Decrypt("[string]")                   
    public $dbName = '[name]';
    public $db;

    public function __construct(){}

    public function dbConnect()
    {    
        [code]
    }
}

Cryptv2.class.php

namespace net\[domain];

use Exception;


class Zcrypt
{
    public static function Encrypt($i)
    {
                [code]  
    }
    public static function Decrypt($i)
    {
        [code]
    }
}

ご協力いただきありがとうございます。

4

2 に答える 2

0

これを機能させるには、使用する必要があります\net\[domain]\Zcrypt::use \net\[domain] as zまたは、のようなエイリアスを割り当ててz\Zcrypt::ください。つまり、PHP マニュアルhttp://php.net/manual/en/language.namespaces.phpを参照してください。検索しますfile4。必要な例があります。

于 2013-11-01T01:47:23.760 に答える