基础不好,问个php类调用的初级问题

查看:114
本文介绍了基础不好,问个php类调用的初级问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

基础不好,问个php类调用的初级问题

有个Test.class.php类

<?php     
class Test{     

  private $name;
  private $age;
  private $work;

  public function __construct($name,$age,$work){
    $this->name=$name;
    $this->age=$age;
    $this->work=$work;
    $this->do_php();
  }      

  public function do_php(){     
    $content="我的名字是".$this->name.",已经".$this->age."岁了,现在的工作是".$this->work;
    return $content;
  }  
       
}     
?>  

调用如下

$content=new \Test('大大','40','php编程');
echo $content;

echo 不出内容,$content已经是对象了。

在调用如下

$content=new \Test('大大','40','php编程');
echo $content->do_php();

输出我的名字是大大,已经40岁了,现在的工作是php编程内容

请教,怎样能$content=new \Test('大大','40','php编程');直接echo出内容

解决方案

我认为只有 @P酱 一个人的答案是对的 @newborn 是用了其他方式,算不上符合题意,至于那些在构造函数里面return的就太不靠谱了。
new 用来生成类的实例,实例的构造方式是调用构造函数,但是构造函数的返回值是没有意义的,因为new不是函数,它不会把构造函数的返回值当做自己的返回值。
__string是PHP中class可以使用的魔术方法之一,此外还有 __sleep, __get, __set等。而 __string 的含义就是当对象的实例需要被转化为string类型时所要进行的处理。所以,正确的示例是

class A {
    public function do() {
        return 'Your conent';
    }
    public function __string() {
        return $this->do();
    }
}
$obj = new A();
echo $obj; //这个时候其实就触发了对象的类型转换,__string()方法被调用。

一定要记得:使用 new 命令获取对象的实例时只有两个结果,一个是得到对象,另一个是构造失败产生异常。绝对不会得到一个string的,如果你只想得到一个string,那么 1) 声明函数即可 2) 定义常量也行

补充:有些人的答案里面提出了在函数中直接写echo语句的方式,千万不要这么做,这是坏习惯,防微杜渐。在函数中echo, print, var_dump等都是调试时候用一下而已,最终代码里面是不能出现的。因为你无法确定谁会调用你的函数,所以内嵌的echo会给调用者带来意外的惊喜。

这篇关于基础不好,问个php类调用的初级问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆