0

好的。我是 PHP 中的类的新手,并试图将变量传递给类中的受保护函数。我该怎么做呢?

类.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

<?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);
    }
?>
4

7 回答 7

4

您不能这样做,因为方法设置为protected您必须将其设置为public才能访问它。否则,您只能从同一个班级或该班级的孩子中调用它。

我还可以建议以大写开头你的类名:class Gindex。您可能还想改进类的名称,因为gindex没有说明它的作用。你的method名字也一样。而且您的参数名称也很糟糕。正确命名事物,以便人们(包括)您自己在(重新)查看您的代码时确切地知道变量包含/类或方法的作用。

您还使用了一个未在 class 范围内的$db任何地方定义的变量。

另外请不要将mysql_*函数用于新代码。它们不再被维护并且社区已经开始了弃用过程。看到红框了吗?相反,您应该了解准备好的语句并使用PDOMySQLi。如果你不能决定,这篇文章将有助于选择。如果你想学习,这里有一个很好的 PDO 教程

这也将修复代码中存在的讨厌的SQL 注入有关如何使用 PDO 或 mysqli 解决此问题的更多信息,请参阅此问题

将数据插入数据库时​​,您似乎也使用网站作为密码。如果您真的要存储数据库,我还建议您阅读散列密码以确保安全。

于 2012-09-04T01:36:37.940 回答
3

我建议您再次阅读有关可见性的文档。

声明为受保护的成员只能在类本身内以及被继承类和父类访问。

$Cgindex->rdev(...是从全局上下文调用,而不是在允许的类上下文中。

于 2012-09-04T01:33:35.073 回答
1

你不能,受保护函数的目的是只能从类内部或继承的类中调用

因此,如果您想像以前那样调用它,请公开您的功能:

public function rdev($a,$b,$c,$d){
于 2012-09-04T01:33:55.683 回答
1

一般来说,您需要阅读有关 OOP 的信息。
受保护的函数是......保护类外部使用。意味着:只有类或子类的方法内部的代码才能调用受保护的方法。此外,持有受保护方法的类的所有子类都将继承该方法。

于 2012-09-04T01:34:13.933 回答
1

这应该有助于:

Public— 类的任何用户都可以直接访问公共变量或方法。

Protected— 受保护的变量或方法不能被该类的用户访问,但可以在从该类继承的子类中访问。

Private— 私有变量或方法只能从定义它的类内部访问。这意味着不能从扩展该类的子类调用私有变量或方法。

于 2012-09-04T01:41:15.143 回答
0

受保护的元素只能从已定义的同一类及其子类不能从外部访问。

于 2012-09-04T01:36:15.103 回答
0

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

在构造中初始化..

于 2015-01-26T13:40:25.840 回答