[英]Trying to call a protected function from outside the class
好。 我是PHP中的類的新手,正在嘗試將變量傳遞到類中的受保護函數中。 我該怎么做呢?
CLASSES.PHP
<?php
include($_SERVER['DOCUMENT_ROOT']."/includes/con.php");
class gindex {
protected function rdev($a,$b,$c,$d){
$d = base64_encode($d);
mysql_query("INSERT INTO mem(first_name,last_name,email,password,type) VALUES(".$a.",".$b.",".$c.",".$d.",'developer')", $db);
}
?>
索引庫
<?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);
}
?>
您無法執行此操作,因為該方法已設置為protected
,因此必須將其設置為public
才能訪問它 。 否則,您只能從同一班級或該班級的子級中調用它。
我也可以建議以大寫字母開頭您的類名: class Gindex
。 您可能還想改善類的名稱,因為gindex
沒有說明它的作用。 method
名稱也是如此。 而且您的參數名稱也很糟糕。 正確命名事物,以便人們(包括您自己)可以在(重新)查看代碼時准確地知道變量包含的類/方法。
您還使用了$db
變量,該變量未在類范圍內定義。
另外,請不要將mysql_*
函數用於新代碼。 它們已不再維護,社區已開始棄用過程 。 看到紅色框了嗎? 相反,您應該了解准備好的語句,並使用PDO或MySQLi 。 如果您不能決定, 本文將有助於選擇。 如果您想學習, 這里有個不錯的PDO教程 。
這也將修復您的代碼中存在的討厭的SQL注入 。 有關如何使用PDO或mysqli修復此問題的更多信息,請參見此問題 。
在將數據插入數據庫時,您似乎還以網站作為密碼。 如果您真的要存儲數據庫,我也建議您讀入哈希以確保安全性。
您不能,僅從類內部或繼承的類中調用受保護函數的目的
因此,請公開您的函數(如果您希望能夠像以前那樣調用它):
public function rdev($a,$b,$c,$d){
您通常需要閱讀有關OOP的內容。
受保護的函數...在類使用之外受到保護。 意思是:只有類或子類的方法內部的代碼才能調用受保護的方法。 同樣,擁有受保護方法的類的所有子類都將繼承該方法。
這應該有助於:
Public
—公共變量或方法可以由該類的任何用戶直接訪問。
Protected
—受保護的變量或方法不能由該類的用戶訪問,但可以在從該類繼承的子類內部訪問。
Private
-私有變量或方法只能從定義它的類內部訪問。這意味着不能從擴展該類的子級調用私有變量或方法。
受保護的元素只能從已定義的同一類中訪問,而不能從外部訪問其子類。
function __construct(){ $this->rdev(); }
在構造中初始化
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.