作者goodsheng (恩哈哈)
看板PHP
标题[请益] 建构子内函数回传问题
时间Tue Jul 24 10:16:00 2018
关於建构子内的函数,若需要有值回传。请问可以这麽用吗?
有一 config.php
==============================
<?php
class config {
function __construct() {
$this->getvalue();
}
function getvalue() {
echo 'log'; //埋确定有进入函数的log
return 10;
}
}
?>
==============================
然後我在主php去引用并使用config.php,想要得到里面getvalue的回传值。
但却无法得到..,请问可能原因为何?
main.php
===========================================
<?php
require_once __DIR__ . '/config.php';
$value = new config();
echo $value;
?>
===========================================
echo 只会得到 'log'却无法得到 return的值(10)
还是说其实问不能样用呢,刚初学请各位大大帮忙,谢谢..
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.163.89.30
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/PHP/M.1532398563.A.D83.html
1F:→ MOONRAKER: 这是当然的好吗,constructor不回传东西 07/24 11:04
2F:→ MOONRAKER: 你有什麽理由非要这样 连多呼叫一个$value->getValue() 07/24 11:05
3F:→ MOONRAKER: 都不想吗 07/24 11:05
谢谢M大回覆~没错我去多呼叫可以解决!!
问题原由是因为我在处理连结资料库的时候,有出现有连上,但无法query问题。
细找问题後,发现CONNECT根本没有回传,所以才衍生出这样的提问。
https://blog.csdn.net/welovesunflower/article/details/7776438
里面范例他有一个 db_connect.php ,相较於我上头的config.php,准备提供引入用。
内容有断如下:
class DB_CONNECT {
// constructor
function __construct() {
// connecting to database
$this->connect(); //这里用了类似作法
}
function connect() {
// import database connection variables
require_once __DIR__ . '/db_config.php';
// Connecting to mysql database
$con = mysql_connect(DB_SERVER, DB_USER, DB_PASSWORD) ...;
....
// returing connection cursor
return $con; //回传connect //这里用了类似作法
}
再来范例里面有一个 get_all_products.php,相较於我的main.php,
里面开头如下:
==============================================
...
// include db connect class
require_once __DIR__ . '/db_connect.php';
// connecting to db
$db = new DB_CONNECT(); //此处根本没有得到值。
// get all products from products table
$result = mysql_query("SELECT *FROM products") or die(mysql_error())
...
==============================================
$db因为没有得到值,所以query不到。
当然如您建议我加个 $con = $db->connect(); 就没问题了。
所以是不是其实真不该这样写呢?
应该明了了!!! 观念问题,谢谢M大~
4F:→ MOONRAKER: 这样我就看不懂了 为什麽他的资料库包装会这样 07/24 11:59
5F:→ MOONRAKER: 一时想不通 但是什麽时候了还在用mysql_connect()这种 07/24 12:13
6F:→ MOONRAKER: 烂招 新的php早就没了 new会跑不出东西八成是这个原因 07/24 12:15
7F:→ MOONRAKER: 赶快找个教用pdo连资料库的文件来看吧 起码也要mysqli 07/24 12:16
8F:→ MOONRAKER: 依照他这种烂招 再connect()一次也没有东西 07/24 12:16
!!! 原来有这东西!!谢谢M大指导!!
※ 编辑: goodsheng (118.163.89.30), 07/24/2018 13:25:40
10F:→ MOONRAKER: 从php 5.5开始废弃 7.0拿掉 如今php 7.2都出了 07/24 13:55
11F:→ MOONRAKER: WAMP一类套件包当然不会再放旧的 虽然你要也是找得到 07/24 13:56
12F:→ goodsheng: 好的!! mysqli或是PDO处理 07/24 13:59
13F:→ xdraculax: $db 得到了 class 啊,return 是供额外呼叫用 07/25 01:20
14F:→ xdraculax: 它的 __construct 也没有 return $this->connect() 07/25 01:21
15F:→ xdraculax: 你怎麽会误以为它 $db 是想取 $con 07/25 01:22
16F:→ xdraculax: mysql_query 没代入 con 就是预设上一个连线 07/25 01:24
17F:→ xdraculax: 范例并没有错应该要有资料,没资料一定是别的有错 07/25 01:25
18F:→ xdraculax: 以上指正你 new class 的误解而非说可继续用 mysql_xx 07/25 01:29
19F:→ MOONRAKER: 有啦昨晚有想出来 他是占mysql_query()没给连线物件 07/25 14:52
20F:→ MOONRAKER: 就自动沿用最近那个的便宜 实在不可取 07/25 14:52
对,其实一开始也不认为他会return东西,因为他mysql_query并没有要带入$con。
而照理说接下来的操作应该要沿用所谓"预设上一个连线"
但实作後却发现并没有,他并没有延用到,所以mysql接下来操作都没有反应。
所以我就天真自己加了$db进去,天真以为$db有东西。
$result = mysql_query($db,"SELECT *FROM products") or die(mysql_error())
想当然没反应,$db不会有东西,因为如x大解说,return不回东西的。
但後来解决方式是再呼叫一次connect(),且也要带入$con,才能成功,没带入不行。
$con = $db->connect();
$result = mysql_query($con,"SELECT *FROM products") or die(mysql_error())
所以才会有建构内return的疑问..
所以现在衍生的问题是:
1.一开始的方式,由建构来初始连线,但回主程式时,却无法直接沿用後连线。
2.後来改再次呼叫connect()的方式,看起来也是无延续上一连线。必须要带入$con。
看起来好像是同一问题,就副程式实体後的连线无法给主程式用?
但这问题可能也不是很重要,因为可以先用了.. (注:上述mysql我也都改成mysqli用了)
再次谢谢x大及M大~~
※ 编辑: goodsheng (118.163.89.30), 07/26/2018 16:05:02