1

我真的一直在尽我最大的努力将我五年的平均熟练 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();

基本上我希望停止使用 global ,因为我现在知道它(大部分)是邪恶的。

我将如何使用类来完成此任务?我希望该类仅从 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);

另一个问题尚不清楚:当您$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 回答