好。我是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);
}
?>
您不能这样做,因为方法设置为protected
,您必须将其设置为public
才能访问它。否则,您只能从同一类或该类的子类调用它。
我还建议你的类名以大写字母class Gindex
开头。您可能还想改进类的名称,因为gindex
没有说明它的作用。您的method
名称也是如此。你的参数名称也很糟糕。正确命名事物,这样人们(包括)自己在(重新)查看代码时就会确切地知道变量包含/类或方法的作用。
您还使用了一个变量$db
,该变量没有在类的任何位置定义。
另外,请不要对新代码使用mysql_*
函数。它们不再被维护,社区已经开始了贬低过程。是否看到红框?相反,您应该了解准备好的语句,并使用PDO或MySQLi。如果你不能决定,这篇文章将有助于你的选择。如果你想学习,这里有一个很好的PDO教程。
这也将修复您代码中存在的令人讨厌的SQL注入有关如何使用PDO或mysqli修复此问题的更多信息,请参阅此问题。
在将数据插入数据库时,您似乎也在使用网站作为密码。如果你真的要存储数据库,我还建议你为了安全起见,仔细阅读哈希密码。
我建议您重新阅读有关可见性的文档。
被声明为受保护的成员只能在类本身内以及由继承类和父类访问。
$Cgindex->rdev(...
是从全局上下文调用的,而不是在允许的类上下文中。
不能,受保护函数的目的是只能从类内部或继承的类中调用
所以,如果你想像以前那样调用,就要公开你的函数
public function rdev($a,$b,$c,$d){
您需要了解OOP的一般知识
受保护的函数是。。。防止类外使用。意味着:只有类或子类的方法内部的代码才能调用受保护的方法。此外,持有受保护方法的类的所有子类都将继承该方法。
这应该会有所帮助:
Public
——类的任何用户都可以直接访问公共变量或方法。
Protected
——受保护的变量或方法不能由类的用户访问,但可以在从类继承的子类内部访问。
Private
——私有变量或方法只能从定义它的类内部访问。这意味着不能从扩展类的子级调用私有变量或方法。
受保护的元素只能从定义的同一类中访问,而其子类不能从外部访问。
function __construct(){
$this->rdev();
}
在构造中初始化。。