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

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

7 に答える 7

4

protectedメソッドがyou have to set it to be able to publicbe able to access itに設定されているため、それを行うことはできません。それ以外の場合は、同じクラスまたはそのクラスの子からのみ呼び出すことができます。

クラス名を大文字で始めることもお勧めします: class Gindex. gindexまた、何をするかについて何も述べていないため、クラスの名前を改善することもできます。おmethod名前も同様です。また、パラメータ名もひどいものです。正しい名前を付けて、コードを (再) 表示しているときに変数の内容 / クラスまたはメソッドの動作を正確に理解できるようにします。

クラスのスコープ内の$dbどこにも定義されていない変数も使用しています。

mysql_*また、新しいコードに関数を使用しないでください。それらはもはや保守されておらず、コミュニティは非推奨プロセスを開始しています。赤いボックスが見えますか? 代わりに、準備済みステートメントについて学び、 PDOまたはMySQLiのいずれかを使用する必要があります。決められない場合は、この記事を参考にしてください。学習したい場合は、ここに良い PDO チュートリアルがあります。

これにより、コード内にある厄介なSQL インジェクションも修正されます。PDO または mysqli を使用してこれを修正する方法の詳細については、この質問を参照してください。

また、データをデータベースに挿入する際のパスワードとして Web サイトを使用しているようです。本当にデータベースを保存するつもりなら、セキュリティのためにパスワードをハッシュすることをお勧めします。

于 2012-09-04T01:36:37.940 に答える
3

可視性に関するドキュメントをもう一度読むことをお勧めします。

保護されていると宣言されたメンバーは、クラス自体内で、継承されたクラスおよび親クラスによってのみアクセスできます。

$Cgindex->rdev(...許可されたクラス コンテキスト内ではなく、グローバル コンテキストから呼び出しています。

于 2012-09-04T01:33:35.073 に答える
1

これは役立つはずです:

Public— パブリック変数またはメソッドには、クラスのすべてのユーザーが直接アクセスできます。

Protected— クラスのユーザーは保護された変数またはメソッドにアクセスできませんが、クラスから継承するサブクラス内ではアクセスできます。

Private— プライベート変数またはメソッドは、それが定義されているクラスからのみ内部的にアクセスできます。これは、クラスを拡張する子からプライベート変数またはメソッドを呼び出すことができないことを意味します。

于 2012-09-04T01:41:15.143 に答える
1

できません。保護された関数の目的は、クラスまたは継承されたクラス内からのみ呼び出されることです

あなたがしたようにそれを呼び出すことができるようにしたい場合は、あなたの関数を公開してください:

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

OOP 全般について読む必要があります。
保護された関数は...クラスの使用の外から保護されています。意味: クラスまたは子クラスのメソッド内のコードのみが、保護されたメソッドを呼び出すことができます。また、保護されたメソッドを保持するクラスのすべての子クラスは、そのメソッドを継承します。

于 2012-09-04T01:34:13.933 に答える
0

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

コンストラクトで初期化..

于 2015-01-26T13:40:25.840 に答える
0

保護された要素は、定義された同じクラスからのみアクセスでき、そのサブクラスは外部からアクセスできません。

于 2012-09-04T01:36:15.103 に答える