好。 我是新来的类在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
-私有变量或方法只能从它是defined.This意味着私有变量或方法不能从扩展类儿童被称为类内部访问。
受保护的内容只能从其中定义及其子类没有来自外部的同一类访问。