[請益] 在一個物件裡如何呼叫另一個物件的屬性?
小弟新手,正在實作一個留言板做練習,
練習過程中遇到在物件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
推
10/19 13:56, , 1F
10/19 13:56, 1F
這個觀念我知道,我先前試著在$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)
→
10/19 15:07, , 2F
10/19 15:07, 2F
→
10/19 15:42, , 3F
10/19 15:42, 3F
推
10/19 15:51, , 4F
10/19 15:51, 4F
→
10/19 15:51, , 5F
10/19 15:51, 5F
沒有用,我寫了一行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)
→
10/19 16:29, , 6F
10/19 16:29, 6F
推
10/19 16:30, , 7F
10/19 16:30, 7F
推
10/19 16:32, , 8F
10/19 16:32, 8F
→
10/19 16:32, , 9F
10/19 16:32, 9F
→
10/19 16:33, , 10F
10/19 16:33, 10F
→
10/19 16:54, , 11F
10/19 16:54, 11F
感謝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)
PHP 近期熱門文章
PTT數位生活區 即時熱門文章
125
129