2010-05-13 54 views
0

我在调用类中的特定函数时遇到问题。电话可以拨出:调用类中的函数

case "Mod10":   
     if (!validateCreditCard($fields[$field_name])) 
     $errors[] = $error_message; 
    break; 

和类代码:

class CreditCardValidationSolution { 

    var $CCVSNumber = ''; 
    var $CCVSNumberLeft = ''; 
    var $CCVSNumberRight = ''; 
    var $CCVSType = ''; 
    var $CCVSError = ''; 

function validateCreditCard($Number) { 

     $this->CCVSNumber  = ''; 
     $this->CCVSNumberLeft = ''; 
     $this->CCVSNumberRight = ''; 
     $this->CCVSType  = ''; 
     $this->CCVSError  = ''; 

     // Catch malformed input. 

     if (empty($Number) || !is_string($Number)) { 
      $this->CCVSError = $CCVSErrNumberString; 
      return FALSE; 
     } 

     // Ensure number doesn't overrun. 
     $Number = substr($Number, 0, 20); 

     // Remove non-numeric characters. 
     $this->CCVSNumber = preg_replace('/[^0-9]/', '', $Number); 

     // Set up variables. 
     $this->CCVSNumberLeft = substr($this->CCVSNumber, 0, 4); 
     $this->CCVSNumberRight = substr($this->CCVSNumber, -4); 
     $NumberLength   = strlen($this->CCVSNumber); 
     $DoChecksum   = 'Y'; 

     // Mod10 checksum process... 
     if ($DoChecksum == 'Y') { 

      $Checksum = 0; 

      // Add even digits in even length strings or odd digits in odd length strings. 
      for ($Location = 1 - ($NumberLength % 2); $Location < $NumberLength; $Location += 2) { 
       $Checksum += substr($this->CCVSNumber, $Location, 1); 
      } 

      // Analyze odd digits in even length strings or even digits in odd length strings. 
      for ($Location = ($NumberLength % 2); $Location < $NumberLength; $Location += 2) { 
       $Digit = substr($this->CCVSNumber, $Location, 1) * 2; 
       if ($Digit < 10) { 
        $Checksum += $Digit; 
       } else { 
        $Checksum += $Digit - 9; 
       } 
      } 

      // Checksums not divisible by 10 are bad. 
      if ($Checksum % 10 != 0) { 
       $this->CCVSError = $CCVSErrChecksum; 
       return FALSE; 
      } 
     } 

     return TRUE; 
} 
} 

当我运行应用程序 - 我得到以下信息:

Fatal error: Call to undefined function validateCreditCard() in C:\xampp\htdocs\validation.php on line 339

什么想法?

回答

0

包含您在其中使用Switch-Case的函数的类是否继承CreditCardValidationSolution类....?

我的猜测是,你正在试图调用类外的函数没有继承它....也许你只是错过了....

编辑点评阅读后: 你需要什么这里是 “继承”

看看下面的链接.....

http://www.killerphp.com/tutorials/object-oriented-php/php-objects-page-4.php

http://marakana.com/blog/examples/php-inheritance.html

希望这会有所帮助....

+0

我没有在课堂上使用开关盒。我在以下内容: Function1()试图调用Function2()和Function2()生活在ClassA,但功能1不 我还没有继承它 - 我对此非常新,老实说,我不甚至知道这意味着什么,但我认为你是对的。我试图从外部调用一个驻留在类内部的函数 – JM4 2010-05-13 04:11:06

2
class Foo { 

    // How may I be called? 
    function bar() { 
    } 

    function baz() { 
     // Use $this-> to call methods within the same instance 
     $this->bar(); 
    } 

    function eek() { 
     // Use self:: to call a function within the same class statically 
     self::bar(); 
    } 

} 

// Use [class]:: to call a class function statically 
Foo::bar(); 

// Use [object]-> to call methods of objects 
$fooInstance = new Foo(); 
$fooInstance->bar(); 

调用方法statically或作为一个实例方法不一定是可互换的,当心。顺便提一下,这在basics of OOP中都很好。

+0

我在别处看到了这个例子,但不知道它适用于我在做什么。也许它确实存在,我误解了,但我基本上试图调用一个函数并让它通过验证。不幸的是,我发现的函数放在一个类的内部(并且带有$这个变量),所以我不断遇到问题。 我有另一个CASE和FUNCTION工作在完全相同的方法,除了没有类和$ this这个变量 – JM4 2010-05-13 04:03:37

+0

@ JM4如果函数是一个类的一部分,你需要把它称为'[class]: :'或'[object] - >',这些函数不是*全局名称空间的一部分。是静态调用函数('::')还是作为对象的实例方法(' - >')取决于函数的设计。由于它使用'$ this',所以*需要*作为实例方法调用(' - >')。所以你必须创建一个新类的实例(使用'new')。可能有附加的字符串来实例化类,应该记录下来,否则你必须仔细阅读代码。 – deceze 2010-05-13 04:24:45

+0

@ JM4更具体的代码:'$ ccVal = new CreditCardValidationSolution(); $ ccVal-> validateCreditCard();' – deceze 2010-05-13 04:26:32