2012-09-04 103 views
0

好的。我是PHP中的類新手,並嘗試將變量傳遞到類中的受保護函數中。我該怎麼做呢?嘗試從類外調用受保護的功能

CLASSES.PHP

​​

的index.php

<?php 
    include($_SERVER['DOCUMENT_ROOT']."/includes/con.php"); 
    if(isset($_POST['developerbtn'])){ 
     $fname = $_REQUEST['fname']; 
     $lname = $_REQUEST['lname']; 
     $email = $_REQUEST['email']; 
     $password = $_REQUEST['password']; 
     $Cgindex = new gindex(); 
     $Cgindex->rdev($fname,$lname,$email,$password); 
    } 
?> 
+1

沒有關係,但它忽略的PHP標籤?>關閉(如果PHP沒有嵌入在HTML或VIC-好習慣相反) –

+0

請參閱http://stackoverflow.com/questions/4361553/php-public-private-protected – Stecman

回答

4

您不能這樣做,因爲方法設置爲protected您必須將其設置爲public才能to access it。否則,您只能從同一班級或該班級的孩子打電話。

我也可以建議以大寫字母開頭:class Gindex。你可能還想改善班級的名字,因爲gindex沒有提到它的功能。您的method名稱也一樣。而你的參數名稱也很糟糕。正確命名事情,以便人們(包括)自己能夠確切瞭解變量包含的內容/類或方法在重新查看代碼時的確切含義。

您還在使用the scope of the class中未定義的變量$db

另外請不要使用mysql_*功能的新代碼。他們不再被維護,社區已經開始了deprecation process。請參閱red box?相反,您應該瞭解prepared statements並使用PDOMySQLi。如果你不能決定,this article將有助於選擇。如果你在意學習,here is a good PDO tutorial

這也將修復你在代碼中存在的令人討厭的SQL Injection有關如何使用PDO或mysqli修復此問題的更多信息,請參閱this question

在將數據插入數據庫時​​,它看起來也像使用網站作爲密碼。如果你真的要存儲數據庫,我還建議你閱讀hashing the password的安全性。

+0

感謝您的幫助。我決定一起使用JQuery/AJAX和PHP。 – yanike

3

我建議你再閱讀visibility的文檔。

聲明爲protected的成員只能在類本身以及繼承類和父類中訪問。

$Cgindex->rdev(...正在從全局上下文中調用,而不是在允許的類上下文中調用。

1

你不能,保護功能的目的是爲了只從類中調用,或繼承的類

這樣會讓你的功能公開,如果你想成爲能夠調用它像你這樣:

public function rdev($a,$b,$c,$d){ 
1

你需要了解一般的OOP。
受保護的功能受到保護,免受班級使用的影響。意思是:只有類或子類中的代碼可以調用受保護的方法。此外,持有受保護方法的類的所有子類都將繼承該方法。

0

受保護的元素只能從定義的同一類訪問,而其子類不能從外部訪問。

1

這應有助於:

Public - 公共變量或方法可以直接由類的任何用戶訪問。

Protected - 受保護的變量或方法不能由類的用戶訪問,但可以在從類繼承的子類中訪問。

Private - 私有變量或方法只能從定義它的類內部訪問。這意味着不能從擴展類的子級調用私有變量或方法。

0

function __construct(){ 
 
\t \t $this->rdev(); 
 
\t }

初始化構建..

相關問題