php构造函数调用方法,php - 调用一个类方法的公共构造函数和调用另一个类方法的一个类方法之间有什么区别? - SO中文参考 - www.soinside.com...

我对OO编程有点陌生,很难理解为什么一种机制有效而另一种机制无效。

我已经创建了一个简单的类,该类将返回MySQL数据库句柄。我尝试直接从构造函数返回句柄的尝试失败。但是,在创建实例之后,可以从类方法或从class(?)方法获得成功。这是类定义和示例脚本<?php

class HMMDatabaseHandle {

private static $configfile = "config.json";

// uncomment for test 1

// public function __construct () {

// return self::get_handle_admin();

// }

public static function create() {

return self::get_handle_admin();

}

private static function get_handle_admin() {

$config = json_decode(file_get_contents(self::$configfile));

$dbhost = $config->database->dbhost;

$dbname = $config->database->dbname;

$dbuser = $config->database->dbuser;

$dbpass = $config->database->dbpass;

try {

return new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);

}

catch(PDOException $e) {

echo $e->getMessage();

}

}

}

?>

这是我正在使用的测试脚本:<?php

require_once 'HMMDatabaseHandle.php';

// Test 1 - fails (uncomment constructor func) at call to prepare() with:

// PHP Fatal error: Call to undefined method HMMDatabaseHandle::prepare()

//$dbh = new HMMDatabaseHandle();

// Test 2 - works when class creates default constructor

// i.e. no explicit __construct() func

// Fetching data from executed query is fine

//$db = new HMMDatabaseHandle();

//$dbh = $db->create();

// Works using static class methods rather than instance

$dbh = HMMDatabaseHandle::create();

$sth = $dbh->prepare('select data_title,track_id from master');

$sth->execute();

while($row = $sth->fetch(PDO::FETCH_ASSOC)) {

...

}

我的问题是:当看上去与直接调用类方法非常相似时,为什么不能直接从构造函数返回句柄?为什么构造函数调用类方法还是我的脚本调用它很重要?

如果我使用PHP的默认构造函数创建实例,我真的使用$ db-> create()调用类方法吗?

我似乎在这里缺少一些基本概念。预先感谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值