Вызов функции внутри класса - PullRequest
0 голосов
/ 13 мая 2010

У меня проблемы с вызовом определенной функции в классе. Звонок сделан:

   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;
}
}

Когда я запускаю приложение - я получаю следующее сообщение:

Неустранимая ошибка: вызов неопределенного функция validateCreditCard () в C: \ XAMPP \ HTDOCS \ validation.php по линии 339

есть идеи?

Ответы [ 2 ]

2 голосов
/ 13 мая 2010
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();

Вызов методов статически или как метод экземпляра не обязательно взаимозаменяем, будьте осторожны Между прочим, все это довольно хорошо описано в основах ООП .

0 голосов
/ 13 мая 2010

Наследует ли класс, содержащий функцию, в которой вы используете Switch-Case, класс CreditCardValidationSolution .... ??

Полагаю, вы пытаетесь вызвать функцию вне класса, не наследуя ее .... Может быть, вы просто пропустили ее ...

Редактировать после прочтения Комментарий: Что вам нужно здесь, это "Наследование"

Взгляните на следующие ссылки .....

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

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

Надеюсь, это поможет ....

...