推 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)
→ ibbadmin:自己解了,在$msg_connect裡加上Global $sql_str_var 10/19 15:07
→ gname:這oo看起來有點怪, 用 global 也覺得好怪... 10/19 15:42
推 LPH66:你已經將那個字串傳進 __construct 裡叫做 $sql_str 了 10/19 15:51
→ 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)
→ ibbadmin:話說,有沒有地方可以貼程式碼交流啊?貼在板上好花... 10/19 16:29
推 Fantasywind:echo "字串:".$sql_str."<br />"; 10/19 16:30
推 Fantasywind:$msg_connect = new c_ins_sql($sql_str_var); 這行 10/19 16:32
→ Fantasywind:$sql_str_var 這是空值 所以裡面的$sql_str才會空 10/19 16:32
→ Fantasywind:OO概念你去new他以前 請忽略他的存在XD 10/19 16:33
→ 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)