试图从类的外部调用一个受保护的功能(Trying to call a protected funct

2019-10-17 05:15发布

好。 我是新来的类在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);
    }
?>

Answer 1:

你不能这样做,因为该法为protected你必须将其设置为public ,以便能够访问它 。 否则,你只能从同一类或类别的儿童调用它。

我还建议以大写的类名: class Gindex 。 您可能还需要改善类的名称,因为gindex也不说是做什么的。 这同样适用于你的method名。 和您的参数名称也太可怕了。 正确命名东西,所以人(含)自己就知道什么变量包含/类或方法不当他们(重新)查看您的代码。

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

另外,请不要使用mysql_*功能的新代码。 他们不再保持和社区已经开始弃用过程 。 见红盒子 ? 相反,你应该了解准备的语句和使用任何PDO或MySQLi的 。 如果你不能决定, 这篇文章将帮助选择。 如果你愿意学习, 这里是个不错的PDO教程 。

这也将修复那个可恶的SQL注入你有没有在你的代码。 有关如何使用任何PDO解决这个问题或mysqli的详细信息请参阅这个问题 。

它也像你插入的数据到数据库时,使用本网站的密码。 如果你真的要存储数据库我也建议你读入散列密码的安全性。



Answer 2:

我建议你阅读的文档知名度一次。

委员声称:保护只能在类本身,并通过继承和父类访问。

$Cgindex->rdev(...从全球范围内通话,不属于允许类范围内。



Answer 3:

你不能,保护功能的目的是为了只从类中调用,或继承的类

这样会让你的功能公开,如果你想成为能够调用它像你这样:

public function rdev($a,$b,$c,$d){


Answer 4:

你需要了解的一般OOP。
受保护的功能...保护类境外使用。 意思是:只有深入其中,子类类的方法,或代码,可以调用保护方法。 此外,持有受保护方法的类的所有子类,将继承该方法。



Answer 5:

这应该可以帮助:

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

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

Private -私有变量或方法只能从它是defined.This意味着私有变量或方法不能从扩展类儿童被称为类内部访问。



Answer 6:

受保护的内容只能从其中定义及其子类没有来自外部的同一类访问。



Answer 7:

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

在构建初始化..



文章来源: Trying to call a protected function from outside the class