PHP 板


LINE

看板 PHP  RSS
小弟新手,正在实作一个留言板做练习, 练习过程中遇到在物件B中无法呼叫物件A属性的困扰。 原始码如下: ---------------------------------- <?php class msg_instance { public $msg_title = "123";//$_POST["msg_title"]; public $msg_body = "456";//$_POST["msg_body"]; public $msg_author = "789";//$_POST["msg_author"]; public $ins_table = "msg_board"; public $sql_str = "insert into msg_board (msg_title, msg_body, msg_author) values ('123','456','789');"; } class c_ins_sql{ public $host = "localhost"; public $db_account = "*******"; public $db_password = "*******"; public $db_id; public $ins_db = "admin001_php2"; function con_db(){ $this->db_id = mysql_connect($this->host,$this->db_account,$this->db_password); mysql_select_db($this->ins_db); } function __construct($sql_str){ if(!is_resource($this->db_id)){ $this->con_db(); echo "建立资料库连结<br />"; } if(is_resource($this->db_id)){ echo "字串:".$sql_str_var."<br />";//这一行出不来 mysql_query($sql_str_var,$this->db_id); mysql_close($this->db_id); } } } if(isset($_POST["msg_title"]) and isset($_POST["msg_body"])){ $msg_inst = new msg_instance(); echo $msg_inst->sql_str."<br />";//这边出的来 $sql_str_var = $msg_inst->sql_str; echo "变数宣告的sql字串".$sql_str_var."<br />";//这边也出的来 $msg_connect = new c_ins_sql($sql_str_var); } ?> --------------------------- 看起来似乎是在物件内, 不能使用其他物件的属性或外部的变数, 请教板上的前辈, 这样理解对吗? 如果要使用其他物件的属性或外部变数, 该怎麽做呢? --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.32.26.142
1F:推 chchwy:OO观念要加强喔 属性一定要用$object->var格式来拿 10/19 13:56
这个观念我知道,我先前试着在$msg_connect里呼叫$msg_inst的属性, 写成$msg_inst->sql_str, 发现无效,所以我特地加了一个变数: $sql_str_var = $msg_inst->sql_str; 发现在$msg_connect里也无法呼叫$sql_str_var, 才会有物件里不能呼叫其他物件属性与外部变数的推测。 ※ 编辑: ibbadmin 来自: 114.32.26.142 (10/19 14:02)
2F:→ ibbadmin:自己解了,在$msg_connect里加上Global $sql_str_var 10/19 15:07
3F:→ gname:这oo看起来有点怪, 用 global 也觉得好怪... 10/19 15:42
4F:推 LPH66:你已经将那个字串传进 __construct 里叫做 $sql_str 了 10/19 15:51
5F:→ LPH66:在那里面就请用这个名字找他 10/19 15:51
没有用,我写了一行test code,echo都叫不出来, 重新改写的程式码如下: <?php $msg_title = $_POST["msg_title"]; $msg_body = $_POST["msg_body"]; $msg_author = $_POST["msg_author"]; $sql_str = "insert into msg_board (msg_title, msg_body, msg_author) values ('".$msg_title."','".$msg_body."','".$msg_author."');"; class c_ins_sql{ public $host = "localhost"; public $db_account = "*****"; public $db_password = "*****"; public $db_id; public $ins_db = "admin001_php2"; function con_db(){ $this->db_id = mysql_connect($this->host,$this->db_account,$this->db_password); mysql_select_db($this->ins_db); } function __construct($sql_str){ echo "test without global:".$sql_str."<br />"; if(!is_resource($this->db_id)){ $this->con_db(); } if(is_resource($this->db_id)){ global $sql_str;//在这个函数里无法直接使用$sql_str,要先做global宣告才能用 。 echo "test with global:".$sql_str."<br />"; mysql_query($sql_str,$this->db_id); mysql_close($this->db_id); } } } if(isset($_POST["msg_title"]) and isset($_POST["msg_body"])){ //如果留言标题与 内容都存在 $msg_connect = new c_ins_sql($sql_str_var); } $b_id = mysql_connect('localhost','admin001_php','1qaz2wsx3edc'); mysql_select_db('admin001_php2'); $c_id=mysql_query('select * from msg_board',$b_id); $comment=mysql_fetch_array($c_id); ?> 测试结果,宣告global前的echo $sql_str叫不出来,宣告global之後才叫的出来。 ※ 编辑: ibbadmin 来自: 114.32.26.142 (10/19 16:27)
6F:→ ibbadmin:话说,有没有地方可以贴程式码交流啊?贴在板上好花... 10/19 16:29
7F:推 Fantasywind:echo "字串:".$sql_str."<br />"; 10/19 16:30
8F:推 Fantasywind:$msg_connect = new c_ins_sql($sql_str_var); 这行 10/19 16:32
9F:→ Fantasywind:$sql_str_var 这是空值 所以里面的$sql_str才会空 10/19 16:32
10F:→ Fantasywind:OO概念你去new他以前 请忽略他的存在XD 10/19 16:33
11F:→ ibbadmin:I see, 我改改看:) 10/19 16:54
感谢F大,是我debug code没有整理乾净。 我把new c_ins_sql($sql_str_var)改为正确的new c_ins_sql($sql_str)後 注解掉global宣告,也能正确传递变数进去了:) 感恩,我对把变数传进物件里的概念又更清楚了一些。 ※ 编辑: ibbadmin 来自: 114.32.26.142 (10/19 16:59)







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP