【问题标题】:Calling a class method from another class..从另一个类调用类方法..
【发布时间】:2010-10-22 23:13:18
【问题描述】:

基本上我有两个课程InventoryCharacter。在构建库存的过程中,我试图确定角色的性别,但这似乎根本不适合我...... 我之前没有真正使用过静态函数,所以如果有人可以指出我做错了什么,将不胜感激......

文件 1:

class Inventory
{
    protected $user_gender;
    public function __construct( $id = 0 )
    {
        $user_gender = Character::getGenderStatic();
    }
}

文件 2:

class Character
{
    protected static $gender;
    public static function getGenderStatic() { 
        return self::$gender; 
    }
}

【问题讨论】:

  • 对我来说看起来是正确的,不知道出了什么问题。有错误信息吗?
  • 在首次使用之前,Character::$gender 是否已在某些静态代码中正确初始化?
  • 作为一个后悔写了很多充满静态变量的类的人,不要这样做。静态使类更难扩展、测试和用作类型提示参数。

标签: php class function static


【解决方案1】:

Inventory 的构造函数中

$user_gender = Character::getGenderStatic();

这会生成一个作用域为构造函数的新变量。你可能是说

$this->user_gender = Character::getGenderStatic();

它指的是您在类开头定义的 Inventory 对象的受保护变量。

我认为您使用静态函数的方式没有任何问题,除了您没有为 Character::$gender(您在字符类开头定义的受保护静态变量)设置值,但我假设你把它设置在别的地方了。

【讨论】:

  • 谢谢罗伯特,但这似乎并没有解决它!性别在字符类中设置并从数据库中提取。在普通页面上获取性别没有问题,但在这个类中...... 翻白眼
  • 你怎么知道它不起作用?您期待什么具体结果,以及正在发生什么?
  • 基本上我在做一个if语句,如果性别等于男性,它会根据男性将信息插入数据库。在我的示例中 Character->user_gender 确实 = 'm' 但是它似乎并没有将其拉入 $this->user_gender.. 但是它只是使用我的语句的 else 部分并放入女性信息.. 代码示例: if ($this->user_gender == 'm') { $db->query="male base";) } else { $db->query="female base"); }
  • 我实际上是通过将 Character 对象传递给 Inventory 的构造函数然后从中调用方法来解决这个问题的。示例:私有函数 __construct(Character $char) { $this->user_gender = $char->getGender; }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-07
  • 2016-10-12
  • 2011-09-09
  • 1970-01-01
相关资源
最近更新 更多