1

私は、5 年間の平均的な熟練した PHP の知識を OOP にもっと依存するように変換するために最善を尽くしてきましたが、クラスの実用性を把握するのにはるかに苦労しています。

私が頻繁に行うことは、クラスの使用方法の良い単純な例であり、開始するのに役立つと思います。

現在、ユーザーデータを格納する「オブジェクト」を作成したい場合は、これを行います...

$user=/* some work to pull from SQL the user's saved information*/;

echo "Welcome ".$user['firstname']." ".$user['lastname']."!";

その場合はうまくいきますが、私がしなければならないときは醜くなります...

$user=/* some work to pull from SQL the user's saved information*/;

function echo_welcome() {
   global $user;
   echo "Welcome ".$user['firstname']." ".$user['lastname']."!";
}

echo_welcome();

基本的に、グローバルの使用をやめようとしています。これは、(ほとんど) 悪であることがわかっているからです。

クラスを使用してこれを達成するにはどうすればよいですか? クラスが SQL から一度だけユーザー情報を生成し、他の関数の内外でユーザー配列の値にアクセスできるようにすることを期待します。

作成後にクラス内で変更する方法を教えていただければ、ボーナス ポイントです。たとえば、他の条件によっては、ユーザー情報を強制的に変更する必要がある場合があります。例えば...

if ($site_settings['allUsersNoAccess']) $user['noAccess']=true;

if ($user['noAccess']) die("Go away");
4

1 に答える 1

0

あなたは変えられる:

function echo_welcome() {
   global $user;
   echo "Welcome ".$user['firstname']." ".$user['lastname']."!";
}

に:

function echo_welcome($user) {
   echo "Welcome ".$user['firstname']." ".$user['lastname']."!";
}

呼び出し時に $user を関数に渡します。

echo_welcome($user);

もう 1 つの質問は明確ではありません$user['noAccess']=true;。変更すると、ユーザー オブジェクトが変更されます。

クラス内で実行する場合は、コンストラクターを使用してユーザー オブジェクトへの参照を保存し、それをメソッドで使用できます。次に例を示します。

class MyClass {

    private    $user;

    function __construct($user){  
        $this->user = $user;
    }

    function do_something(){
        echo $user['firstname'];
    }

    function setUserName($new_name){
        $user['first_name'] = $new_name;
    }
}
于 2013-09-23T00:25:07.350 に答える