0
<?php
try{

    $test = new TestAccessModifiers("2345","xyz","vfd","a0001","99","67"); /*invoking the class*/

    var_dump($test->calculate());
}
catch(Exception $e){

    echo $e->getMessage();
}
?>

<?php 
class TestAccessModifiers {


    function TestAccessModifiers($user_p,$user_fn,$user_ln,$user_id,$marks1,$marks2) {
        echo "hello1";
        $this->user_phone=$user_p;
        $this->user_fname=$user_fn;
        $this->user_lname=$user_ln;
        $this->user_id=$user_id;
        $this->marks1=$marks1;
        $this->marks2=$marks2;


        echo $this->marks1;
    }
    private  $additional_marks = 10;
    public static function calculate(){


        return $this->marks1+$this->marks2+$this->getAdditionalmarks();

    }

    public function getAdditionalmarks(){

        return $this->additional_marks;
    }


}
?>

上記は私が実行しようとしている単純なコードです...しかし、_constructorを使用して試したTestAccessModifiersを呼び出すことができません

4

5 に答える 5

2

TestAccessModifiers 関数の名前をに変更します__construct

public function __construct($user_p,$user_fn,$user_ln,$user_id,$marks1,$marks2) {
    echo "hello1";
    $this->user_phone = $user_p;
    $this->user_fname = $user_fn;
    $this->user_lname = $user_ln;
    $this->user_id = $user_id;
    $this->marks1 = $marks1;
    $this->marks2 = $marks2;
    echo $this->marks1;
}

次に、関数から削除staticcalculateます。

その後、動作するはずです。

参照: http: //php.net/manual/en/language.oop5.decon.php

于 2012-07-25T14:47:10.587 に答える
1

別のphpページでクラスを呼び出す場合は、このように含めるようにしてください。

include('/path/to/your/class.php');
$test = new TestAccessModifiers("2345", "xyz", "vfd", "a0001", "99", "67");

または、同じファイル内でオブジェクトをインスタンス化する場合は、インスタンス化コードをクラスの下に配置します。

class TestAccessModifiers {
    public function __construct($user_p, $user_fn, $user_ln, $user_id, $marks1, $marks2) {
        echo "hello1";
        $this->user_phone = $user_p;
        $this->user_fname = $user_fn;
        $this->user_lname = $user_ln;
        $this->user_id = $user_id;
        $this->marks1 = $marks1;
        $this->marks2 = $marks2;
        echo $this->marks1;
    }
    private $additional_marks = 10;

    public function calculate() {
        return $this->marks1 + $this->marks2 + $this->getAdditionalmarks();
    }
    public function getAdditionalmarks() {
        return $this->additional_marks;
    }
}

try {
    $test = new TestAccessModifiers("2345", "xyz", "vfd", "a0001", "99", "67"); /*invoking the class*/
    var_dump($test->calculate());
} catch (Exception $e) {
    echo $e->getMessage();
}

クラスで静的メソッドを定義し、静的メソッド$this内で疑似変数を使用しましたが、これはPHPでは許可されていません。PHPでは静的メソッドはオブジェクトコンテキスト外で扱われるためです。使用するには静的メソッドを削除する必要があります$this

于 2012-07-25T14:51:26.967 に答える
0

最初に:あなたが持っているPHPのバージョンはどれですか?2番目:インスタンス化するファイルにクラスファイルを含めていますか?3番目:関数の「計算」は静的であるため、インスタンスから関数にアクセスすることはできず、非静的なプロパティを読み書きする方法がありません。

TestAccessModifiers ::calculate();を試してください。単純なリターン「HelloWorld」を入れます

ご挨拶。

于 2012-07-25T14:51:18.403 に答える
0

どのバージョンのPHPについて話しているのですか?最初に頭に浮かぶのは、自動ロードに追加しましたか?クラスのイニシエータールーチンとして__constructorメソッドを使用します。

于 2012-07-25T14:52:45.227 に答える
0
public static function calculate() {
    return $this - > marks1 + $this - > marks2 + $this - > getAdditionalmarks();
}

$this静的コンテキストから操作することはできません。このメソッドを非静的にするか、他の変数を静的になるように調整します。どちらかコンテキストに適しています。

于 2012-07-25T14:53:16.903 に答える