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