我对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
数组放在哪里,所以我尝试了几个地方,但没有一个会被接受。另外,我在连接到第一个if(is_numeric($number))
的 else 语句上收到错误,但我无法确定该错误不是由我得到的另一个小错误引起的。 最后一个错误是我不确定在这页代码中的哪个位置调用类中的函数。 任何帮助将不胜感激。 再一次,我是用 php 做任何有用事情的新手,但到目前为止我喜欢它。 谢谢
您的代码缺少几个大括号,您的$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();
代码中有一些语法错误。我对您的代码进行了一些修改,现在它正在工作:
<?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 中,通常不在命名变量时使用大写字母(类除外),与其他变量不同语言
PHP 中没有
main()
希望这有帮助,请原谅我的英语,如果我错了,请纠正我
你得到 else 语句错误的原因是因为你的 if
语句的右大括号}
,请注意,在你的else
条件之后你有一个右大括号,而不是这样做,你必须先关闭if
语句,然后做else
语句,在你的例子中else
意味着if is not numeric
然后做 sth, 你也有很多 if 语句,看起来有点多余。您可以做的是将它们置于与if($number ==0 || $number == 2 || $number % 2 ==0 ) return 0 elseif // do sth
相同的状态
你无法获得$Testvalues的原因是您需要将数组传递给您的函数然后您可以使用它,您在哪里调用 TestIsPrime 函数? 当你调用它时,请喜欢TestIsPrime($TestValues);
顺便说一句,最好不要使用大写字母作为变量...