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
public static function calculate() {
    return $this - > marks1 + $this - > marks2 + $this - > getAdditionalmarks();
}

您不能$this从静态上下文进行操作。将此方法设为非静态,或将其他变量调整为静态,以适合您的上下文。

于 2012-07-25T14:53:16.903 回答
0

第一:你有哪个 PHP 版本?第二:您是否在您正在实例化的文件中包含类文件?第三:您的“计算”函数是静态的,那么,您无法从实例访问它,也无法读取或写入非静态属性。

试试 TestAccessModifiers::calculate(); 并输入一个简单的返回“Hello World”

问候。

于 2012-07-25T14:51:18.403 回答
0

我们在谈论什么版本的 PHP?首先想到的是:您是否将其添加到 autoload ?我会使用 __constructor 方法作为类的启动程序。

于 2012-07-25T14:52:45.227 回答