0

我对 PHP 很陌生,尤其是面向对象的 php,我正在编写一些简单的代码,但我不太确定到目前为止我所写的内容有什么问题。我敢肯定这很简单,但我已经在这堵墙上撞了一会儿,想我会在这里问。

class primes
{
$TestValues = array(0, 1, 2, 3, 4);
function IsPrime($number)
{

    //if number is a number, perform the rest of the tests, else, return -1 (error)
    if(is_numeric($number))
    {

        //if number is less than 0, return -1 (error)
        if($number < 0)
            return -1;
        //if number is 0, then return 0 (false, not prime)
        if($number == 0)
            return 0;
        //if number is greater than 1024, return -1 (error)
        if($number > 1024)
            return -1;
        //if number is 1, return 0 (false, not prime)
        if($number == 1)
            return 0;
        //if number is 2, return 1 (true, is prime)
        if($number == 2)
            return 1;
        //if number mod 2 is 0, then it is even, and no even number is prime except 2, which is handled above. so return 0 (false, not prime)
        if($number % 2 == 0)
            return 0;

        //if number has passed all previous tests, mod it by all odd numbers from 3 to its square root rounded up.
        for($i = 3; $i <= ceil(sqrt($number)); $i = $i +2)
        {
            //if any numbers mod 3 to its square root equal 0, return 0, (false, not prime)
            if($number % $i == 0)
                return 0;
        }
        //if the number has passed all above requirements, then it is a prime number below 1024.
        return 1;
    else
    {
        return -1;
    }
    }
}

function TestIsPrime()
{
    foreach($TestValues as $value)
        IsPrime($value);
        if(IsPrime() == 0)
            echo($value . "=> Is not Prime");
        elseif(IsPrime() == 1)   
            echo($value . "=> Is Prime");
        elseif(IsPrime() == -1)
            echo($value . "=> Is an Error");

}

 function main()
 {
     TestIsPrime();

  }

}
main();

我收到一条错误消息,说我没有将数组放置在当前位置。我不太确定 php 代码的结构应该如何与类一起使用,所以我不确定将$TestValues数组放在哪里,所以我尝试了几个地方,但没有一个会被接受。另外,我在连接到 first 的 else 语句上遇到错误if(is_numeric($number)),但我不能确定该错误不是由我遇到的另一个小错误引起的。最后一个错误是我不确定在这个单页代码中的哪个位置调用类中的函数。任何帮助,将不胜感激。再一次,我对在 php 中做任何有用的事情都很陌生,但到目前为止我很喜欢它。谢谢,

4

3 回答 3

1

您的代码缺少几个大括号,您$TestValues也是该类的一部分,而不是全局变量。

我修复了代码,但是您必须检查数学并阅读php 网站上的oop 教程。

<?php
class Primes {
    public $TestValues = array(0, 1, 2, 3, 4);
    function IsPrime($number) {

        //if number is a number, perform the rest of the tests, else, return -1 (error)
        if(is_numeric($number)) {

            if($number < 0 || $number > 1024)
                return -1;
            if($number === 0 || $number === 1 || $number % 2 === 0)
                return 0;

            //if number has passed all previous tests, mod it by all odd numbers from 3 to its square root rounded up.
            for($i = 3; $i <= ceil(sqrt($number)); $i = $i + 2) {
                //if any numbers mod 3 to its square root equal 0, return 0, (false, not prime)
                if($number % $i == 0)
                    return 0;
            }
            //if the number has passed all above requirements, then it is a prime number below 1024.
            return 1;
         } else {
            return -1;
        }
    }

    function test() {
        foreach($this->TestValues as $value) {
            $t = $this->IsPrime($value);
            if($t === 0) {
                echo($value . "=> Is not Prime");
            } elseif($t === 1) {   
                echo($value . "=> Is Prime");
            } elseif(IsPrime() == -1) {
                echo($value . "=> Is an Error");
            }
            echo "\n";
        }
    }
}

function main() {
    $prime = new Primes();
    $prime->test();
}

main();
于 2013-09-11T00:02:36.620 回答
1

您的代码中有一些语法错误。我对您的代码进行了一些修改,现在它正在运行:

<?php

// Check the number to be prime or not
function IsPrime($number) 
{
    // If the variable is not numeric, negative or greater than 1024, exit
    if (!is_numeric($number) || $number < 0 || $number > 1024)
    {
    return -1;
    }
    // Perform the tests
    switch($number)
    {
    //if number is 0 or 1, then return 0 (false, not prime)
        case 0 :
        case 1 :
            return 0;
        break;
    //if number is 2, return 1 (true, is prime)
        case 2 :
            return 1;
        break;
    }

    //if number mod 2 is 0, then it is even, and no even number is prime except 2, return 0 (false, not prime)
    if($number % 2 == 0) 
    { 
    return 0;
    }

    //if number has passed all previous tests, mod it by all odd numbers from 3 to its square root rounded up.
    for($i = 3; $i <= ceil(sqrt($number)); $i = $i +2)
    {
        if($number % $i == 0) 
        {
            return 0;
        }
    }

    //if the number has passed all above requirements, then it is a prime number below 1024.
    return 1;
} // End of isprime function

// create an array of numbers
$testvalues = range(-2, 100);

foreach($testvalues as $value) 
{
    switch(isprime($value))
    {
        case 0 :
            echo("<p style='color:gainsboro;'>" . $value . "=> Is not Prime</p>");
            break;
        case 1 :
            echo("<p style='color:green;'>" . $value . "=> Is Prime</p>");
            break;
        case -1 :
            echo("<p style='color:red;'>" . $value . "=> Is an Error</p>");
            break;
    }
}
?>

备注:

  • 我认为你不需要在这里上课。这是一个简单的程序,使用类会使它有点复杂,而 php 以其简单性而闻名。所以保持简单。

  • 在某些情况下 switch 比 if 更好,更易读,所以尽可能使用它http://php.net/manual/en/control-structures.switch.php

  • 每种语言都有它首选的语法。在 php 中,与其他语言不同,在命名变量(类除外)中通常不使用大写字母

  • main()php中没有

希望这会有所帮助,如果我错了,请原谅我的英语并纠正我

于 2013-09-11T00:42:45.453 回答
0

你得到 else 语句错误的原因是因为你的语句的右大括号 ,请注意你的条件后面有一个右大括号,而不是这样做,你必须先关闭语句然后执行语句,这在你的情况下意味着然后做某事,你也有这么多的 if 语句,看起来有点多余。你能做的就是把它们放在同样的条件下,比如}ifelseifelseelseif is not numericif($number ==0 || $number == 2 || $number % 2 ==0 ) return 0 elseif // do sth

你不能得到 $Testvalues 的原因是你需要将数组传递给你的函数然后你可以使用它,你在哪里调用你的 TestIsPrime 函数?当您调用它时,请执行 TestIsPrime($TestValues); 之类的操作

顺便说一句,最好不要使用大写字母作为变量...

于 2013-09-10T23:49:59.790 回答