【问题标题】:Help with a class method?帮助一个类方法?
【发布时间】:2009-09-24 22:40:09
【问题描述】:

从下面的演示中你大概可以看出我在做什么,构造方法有效,但测试方法无效,报错 致命错误:在非对象上调用成员函数 get()

有人可以告诉我如何制作这样的东西吗?

<?PHP
//user.class.php file
class User
{
    public $pic_url;

    function __construct($session)
    {
        if($session->get('auto_id') != ''){
            $this->pic_url = $session->get('pic_url');
        }else{
            return false;
        }
    }

    function test($session)
    {
        return $this->pic_url = $session->get('pic_url');
    }
}

$user = new user($session);

//this works
echo $user->pic_url;

//this one does not work
echo $user->test();
?>

【问题讨论】:

  • 不要把这个当作个人的,但是在 12345 个关于课程+课程的问题之后,您应该考虑获得一些“动手”的专家意见、辅导,或者额外几个小时学习PHP + OOP ...再次,只是我的谦虚建议
  • 为什么要从构造函数返回值?
  • @Yacoby:确实——在我的屏幕前放了一个咖啡杯让我想念那个 8) +1
  • $user-&gt;test() - 你没有在这里传递 $session 对象。请解释该方法应该做什么。
  • @jcinacio,您的评论根本没有帮助,事实上,这正是我在这里发布问题所做的,第二)这与会话无关,这是一个虚构的例子代码,你知道“例子”来学习和理解这个概念,碰巧这个例子不起作用,我阅读和练习的所有内容都不会像我认为的那样工作,非常感谢“谦虚的建议”但是不,同时感谢

标签: php class


【解决方案1】:

//这个不行 echo $user->test();

在此处调用不带参数的函数会引发警告

Warning: Missing argument 1 for test(), called in ....

并且因为您正在尝试访问该对象的函数,该函数未通过 test() 调用它也会引发致命错误。

只需将 $session 参数也传递给 test()。

或者你可以试试..

class User
{
    public $pic_url;
    private $class_session;

 public function __construct($session)
 {
     $this->class_session = $session;
     ... other code
 }
 function test()
    {
        return $this->pic_url = $this->class_session->get('pic_url');
    }
}

$user = new user($session);
echo $user->pic_url;
echo $user->test();

【讨论】:

    【解决方案2】:

    您没有向函数提供 $session。

    【讨论】:

    • 他是对的,但我想我应该多解释一下错误信息。它表明您在“非对象”上调用 get - 因此,$session 是非对象。由此您可以推断出$session 的设置不正确。
    【解决方案3】:

    试试这个:

    <?php
    //user.class.php file
    class User
    {
        public $pic_url;
    
        public function __construct($session)
        {
            if($session->get('auto_id') != ''){
                    $this->pic_url = $session->get('pic_url');
            } else {
                    return false;
            }
        }
    
        public function test($session)
        {
            if($this->pic_url == $session->get('pic_url')) {
                return $this->pic_url;
            } else {
                return 'test failed';
            }
        }
    }
    
    $user = new User($session);
    
    //this works
    echo $user->pic_url;
    
    //this one does not work
    echo $user->test();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多