Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在类构造函数中返回SimpleXML对象--为什么它不能工作?

在类构造函数中返回SimpleXML对象--为什么它不能工作?
EN

Stack Overflow用户
提问于 2010-11-14 06:11:40
回答 1查看 556关注 0票数 1

嘿,我有一个小测试用例设置如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class T {
    public function __construct(){
        $obj = new SimpleXMLElement(file_get_contents('vote.xml'));
        return $obj;
    }
}

$vv=new T;
var_dump($vv);

在本例中,$vv的转储等于object(T)#1 (0) { } -换句话说,不是预期的输出

但是,当我在一个单独的函数中返回对象时,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class T {
    public function stackOverflow(){
        $obj = new SimpleXMLElement(file_get_contents('vote.xml')); // or simplexml_load_file
        return $obj;
    }
}

$vv=new T;
$vv = $vv->stackOverflow();
var_dump($vv);

输出如出一辙(包含'vote.xml‘、标记和属性内容的对象)。为什么不能在构造函数内部返回对象?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-14 06:17:41

构造函数将只返回对新创建的对象的引用。这是故意的--不然你怎么能得到新对象的引用呢?

但是,您可以在构造函数中创建一个对象属性,然后从外部访问它。这意味着您将在构造函数过程中创建对象,因此它将在正确的时间完成,而且还可以保证完成。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class T {
    public $sxml;

    public function __construct(){
        $this->sxml = new SimpleXMLElement(file_get_contents('vote.xml'));
    }
}

$vv=new T;
var_dump($vv->sxml);

当然,如果不需要对新对象的引用,则可以使用静态方法而不使用构造函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class T {
    public static function sxml() {
        return new SimpleXMLElement(file_get_contents('vote.xml'));
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4177858

复制
相关文章
为什么构造函数不能为虚函数
1、从使用角度         虚函数主要用于在信息不全的情况下,能使重载的函数得到对应的调用。构造函数本身就是要初始化实例,那使用虚函数也没有实际意义呀。所以构造函数没有必要是虚函数。 虚函数的作用在于通过父类的指针或者引用来调用它的时候能够变成调用子类的那个成员函数。而构造函数是在创建对象时自动调用的,不可能通过父类的指针或者引用去调用,因此也就规定构造函数不能是虚函数。 2、从实现上看,vbtl在构造函数调用后才建立,因而构造函数不可能成为虚函数    从实际含义上看,在调用构造函数时还不能确定对象
用户1215536
2018/02/05
2.3K0
【C++】构造函数初始化列表 ⑤ ( 匿名对象 生命周期 | 构造函数 中 不能调用 构造函数 )
下面的代码中 , 在 fun 函数中 , 调用 Student(18, 180) 代码 , 创建 Student 类型的匿名对象 , 匿名对象的生命周期 只存在于 这一行代码 , 该行代码执行完毕后 , 匿名对象 就会被 析构 ;
韩曙亮
2023/10/15
2310
【C++】构造函数初始化列表 ⑤ ( 匿名对象 生命周期 | 构造函数 中 不能调用 构造函数 )
[PHP] xml转对象函数simplexml_load_string
如果有将xml转成数组或对象的功能 , 可以使用这个函数比较简单 $obj=simplexml_load_string($xml,'SimpleXMLElement', LIBXML_
唯一Chat
2021/05/17
7770
[PHP] xml转对象函数simplexml_load_string
Python中如何构造返回函数以及怎么使用返回函数
Python返回函数即当一个函数的返回结果是另一个函数的时候,这样的函数就是返回函数。
python自学网
2021/12/05
2.8K0
Python中如何构造返回函数以及怎么使用返回函数
mybatis返回值为map类型时怎么处理_构造函数不能有返回类型
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/09
1.8K0
mybatis返回值为map类型时怎么处理_构造函数不能有返回类型
mybatis返回对象_存储过程不能返回结果
在更多的了解mybatis后发现不单单通过实体类可以直接返回数据,还可以直接返回一个Map结果集(resultType=”java.util.Map”) ,如果是多条数据则返回一个List<Map<String, Object>>结果集。
全栈程序员站长
2022/11/09
1.8K0
mybatis返回对象_存储过程不能返回结果
【C++】C++ 类中的 this 指针用法 ③ ( 全局函数 与 成员函数 相互转化 | 有参构造函数设置默认参数值 | 返回匿名对象与返回引用 )
C++ 编译器 , 在编译阶段会将 C++ 类的 成员函数 转为 全局函数 , 转换时 , 会 增加一个参数到参数列表开始为止 , 这个增加的参数是 对象本身的指针 ;
韩曙亮
2023/10/15
2490
【C++】C++ 类中的 this 指针用法 ③ ( 全局函数 与 成员函数 相互转化 | 有参构造函数设置默认参数值 | 返回匿名对象与返回引用 )
为什么final引用不能从构造函数内“逸出”
前面我们提到过,写final域的重排序规则可以确保:在引用变量为任意线程可见之前,该引用变量指向的对象的final域已经在构造函数中被正确初始化过了。其实要得到这个效果,还需要一个保证:在构造函数内部,不能让这个被构造对象的引用为其他线程可见,也就是对象引用不能在构造函数中“逸出”。为了说明问题,让我们来看下面示例代码:
好派笔记
2021/10/07
5130
在ReadWriteLock类中读锁为什么不能升级为写锁?
关于读写锁里面有一个锁升级和降级的问题,也就是写锁可以降级为读锁,但是读锁却不能升级为写锁。那么为什么是这样?
我是攻城师
2018/08/03
3K0
构造方法或new返回该对象
一个小技巧,调用构造方法或都new返回该对象: function Person(){ // ... // 不是new的时候this指向的是调用者 默认是window if (!(this instanceof Person)) { return new Person(); } } Person.prototype.sayHello = function (){ console.log("Hello World!"); } var lufei = Person(); lufe
kai666666
2020/10/17
7280
解析C#类中的构造函数
彭泽0902
2018/01/04
3.4K0
dart(四)--类、构造函数、方法dart(四)--类、构造函数、方法
类 构造函数 构造函数 className 或 className.identifier, 关键字 new 可选. 构造函数语句执行顺序:初始化器,父类构造函数,子类构造函数。 class Point { num x, y, distance; /* 1,匿名构造函数 2,使用this.x 简化写法,原写法: Point(num x , num y) 3,此处 : 后为初始化器,初始化的结果赋值给初始化器的对象,是最简洁的方式。
用户8893176
2021/08/09
1.4K0
类和对象(构造深入)
普通函数指针:返回值类型(*指针名)(参数列表) 注意:void( * p_fun)(int,int);和void * p_fun(int,int);的区别 前者是定义函数指针,后者是函数声明(指针函数)
小飞侠xp
2018/12/27
9880
Equation(类与对象+构造)
1、无参构造(abc默认值为1、1、0)与有参构造函数,用于初始化a、b、c的值;
叶茂林
2023/07/30
2590
Equation(类与对象+构造)
VC++ error C2533: “Layer::{ctor}”: 构造函数不能有返回类型
vc++ MFC  中出现错误  error C2533: “Layer::{ctor}”: 构造函数不能有返回类型 的原因:
acoolgiser
2019/01/17
7880
类成员模板函数为什么不能被 virtual 修饰
问题 类成员模板函数为什么不能被 virtual 修饰?比如下面的代码会编译不通过, class Animal{ public: template<typename T> virtual void make_sound(){ //... } }; 回答 模板是编译期生成实例化的,虚函数是运行期才能确定下来的,这就出现矛盾了。
ClearSeve
2022/02/10
1.1K0
JS中对象+构造函数+原型对象谈恋爱了嘛。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script> function Person(myName,myAge) { this.name=myName; this.age=myAge; this.currentType="构造函数中的属性"; this.say=function() { console.log("构造函数里面的方法");
贵哥的编程之路
2020/10/28
1.2K0
JS中对象+构造函数+原型对象谈恋爱了嘛。
构造函数隐式转换_构造函数实例化对象
http://blog.csdn.net/thefutureisour/article/details/7705771
全栈程序员站长
2022/11/10
4040
Tree类(类对象与构造)Python
定义一个Tree(树)类,有成员ages(树龄),不带参数的构造函数对ages初始化为1,成员函数grow(int years)对ages加上years,age()显示tree对象的ages的值。
叶茂林
2023/07/30
1730
【C++】拷贝构造函数调用时机 ② ( 对象值作为函数参数 | 对象值作为函数返回值 )
" 拷贝构造函数 " 又称为 " 赋值构造函数 " , 该类型构造函数有 4 种调用时机 ;
韩曙亮
2023/10/15
2540
【C++】拷贝构造函数调用时机 ② ( 对象值作为函数参数 | 对象值作为函数返回值 )

相似问题

为什么对象的构造函数返回对象()而不是它的构造函数?

13

为什么JavaScript Date对象构造函数不能正常工作?

20

为什么regex构造函数不能工作?

12

为什么子类对象不能保存超类构造函数?

41

在基类构造函数中构造对象?

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文