行。我是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);
}
?>
的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);
}
?>
答案 0 :(得分:4)
您不能这样做,因为该方法设置为protected
,您必须将其设置为public
才能to access it。否则你只能从同一个班级或那个班级的孩子那里召唤它。
我还建议您使用大写字母class Gindex
启动您的类名。您可能还想改进类的名称,因为gindex
没有说明它的作用。您的method
名称也是如此。你的参数名称也很糟糕。正确地命名,这样人们(包括)自己就会知道变量包含/类或方法在(重新)查看代码时的确切含义。
您还使用了the scope of the class中未定义的变量$db
。
另外请不要将mysql_*
函数用于新代码。它们已不再维护,社区已开始deprecation process。请参阅red box?相反,您应该了解prepared statements并使用PDO或MySQLi。如果您无法决定,this article将有助于选择。如果您想学习,here is a good PDO tutorial。
这也将解决您的代码中存在的令人讨厌的SQL Injection。有关如何使用PDO或mysqli修复此问题的详细信息,请参阅this question。
在将数据插入数据库时,您似乎也在使用网站作为密码。如果您真的要存储数据库,我还建议您阅读hashing the password以确保安全。
答案 1 :(得分:3)
答案 2 :(得分:1)
你不能,只能从类内部或继承类中调用受保护函数的目的
所以,如果你想像以前一样打电话给你的功能,那就公开你的功能:
public function rdev($a,$b,$c,$d){
答案 3 :(得分:1)
您需要了解一般的OOP 受保护的功能在类使用之外受到保护。意思是:只有类或子类的方法内的代码才能调用受保护的方法。此外,持有受保护方法的类的所有子类都将继承该方法。
答案 4 :(得分:1)
这应该有所帮助:
Public
- 该类的任何用户都可以直接访问公共变量或方法。
Protected
- 类的用户无法访问受保护的变量或方法,但可以在继承自类的子类中访问。
Private
- 私有变量或方法只能从定义它的类内部访问。这意味着无法从扩展类的子进程调用私有变量或方法。
答案 5 :(得分:0)
受保护的元素只能从定义的同一个类访问,而它们的子类不能从外部访问。
答案 6 :(得分:0)
function __construct(){
$this->rdev();
}
&#13;
在Construct中初始化..