【问题标题】:Assign session variable to class variable while initialize the class variable in PHP在PHP中初始化类变量时将会话变量分配给类变量
【发布时间】:2010-01-29 14:36:42
【问题描述】:

在初始化类变量时,我有一个关于将会话变量分配给类变量的问题。

检查我下面的代码

<?php 
class ModifyProfile
{
    var $userType=$_SESSION['wb_user_type'];

    var $tablename=WB_CUSTOMER_TABLE;
    var $primarykey="nCustomerID";

}
?>

当我通过创建此类对象运行上述代码时。它给出了 php 的解析错误。

但是当我将第一个变量声明为空白时,它工作正常。 请检查正在运行的代码。

<?php 
class ModifyProfile
{
    var $userType='';

    var $tablename=WB_CUSTOMER_TABLE;
    var $primarykey="nCustomerID";
}
?>

所以我可以像上面那样将会话变量分配给类变量吗?

编辑:

在声明类变量时,public、private 和 protected 关键字有什么用? 我在php5上运行。

谢谢

【问题讨论】:

    标签: php oop class


    【解决方案1】:

    当您像这样分配 class 变量时,它们实际上不能是可变的。也就是说,它们必须是文字值,例如字符串,或者像第二个示例中那样有效的常量。

    好的:

    public $foo = 123;
    public $bar = "hello";
    public $blah = SOME_CONSTANT;
    

    不好:

    public $foo = 123 + 45;
    public $bar = "hello"
                . "world";
    public $blah = some_function();
    

    您可能想要的是 instance 变量。这些在类构造函数中初始化,这是一个在您创建该类的新实例时运行的函数。

    class Foo {
        public $bar,
               $baths;
    
        public function __construct($blah) {
            $this->bar = $_SESSION['bar'];
            $this->baths = $blah;
        }
    }
    

    【讨论】:

    • 你能解释一下关键字“Public, private and protected”在声明类变量时的用途吗????谢谢
    • 它决定了您可以从哪里访问这些成员。 public 表示可以从任何地方访问它。 private 表示可以从该类内部访问。 protected 表示只能从该类及其所有子类访问它。如果你使用var 或者没有在你的函数上显式使用public/private/protected,PHP 默认使用public
    【解决方案2】:

    一些提示:

    • 去掉var,改用private/protected/public
    • 在构造函数中分配所需的值,请参阅@hsz 的答案。
    • 不要假设 $_SESSION['wb_user_type'] 已设置,这是一种不好的做法,您的课程将无法移植。

    好例子:

    <?php 
    class ModifyProfile
    {
        protected $tablename=WB_CUSTOMER_TABLE;
    
        public function __construct($user_type) {
            $this->userType = $user_type;
        }
    
    }
    
    $user_type = isset($_SESSION['wb_user_type']) ? $_SESSION['wb_user_type'] : 'n/a';
    
    $profile = new ModifyProfile($user_type);
    ?>
    

    【讨论】:

      【解决方案3】:

      在构造函数中进行赋值。

      【讨论】:

        【解决方案4】:

        尝试:

        <?php 
        class ModifyProfile
        {
            var $tablename=WB_CUSTOMER_TABLE;
            var $primarykey="nCustomerID";
        
            public function __construct() {
                $this->userType = $_SESSION['wb_user_type'];
            }
        
        }
        ?>
        

        【讨论】:

        • 更好的恕我直言,因为您以后可能会使用不同的方式来获取用户类型: public function __construct($userType) {$this->userType = $userType; } 及以后使用: $profile = new ModifyProfile($_SESSION['wb_user_type']);您还可以阅读依赖注入。
        • __construct 在 PHP4 中不起作用(并且因为作者使用“var”而不是可能很重要的公共/私有/保护)
        • 他说他使用PHP 4 吗?也许这是他的习惯?
        • 他没这么说,但这是可能的。
        • 因为在 PHP5 中不声明可见性是个坏习惯
        猜你喜欢
        • 1970-01-01
        • 2016-09-22
        • 2022-01-13
        • 2016-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-14
        • 1970-01-01
        相关资源
        最近更新 更多