php oop конструкция необязательные параметры синтаксическая ошибка - PullRequest
1 голос
/ 16 ноября 2011

Я изучаю php oop, изучаю книги и т.д.Однако, когда я пытаюсь написать код для создания нового объекта, у меня возникают проблемы с синтаксической ошибкой.

Например, мой оператор конструкции имеет 6 параметров.Я передал значения первым трем, хотел пропустить следующие два и установить значение для последнего.Я просто помещаю запятые между ними, но это вызывает синтаксическую ошибку.

Что я должен поставить вместо ничего, чтобы принять значение по умолчанию?

Спасибо

Ответы [ 3 ]

4 голосов
/ 16 ноября 2011

Пропустить NULL вместо ничего

Пример:

$obj = new Whatever($parm1,$parm2,$parm3,NULL,NULL,NULL); 

или в конструкторе установите значение null

__construct($parm1 = NULL,$parm2 = NULL,$parm3 = NULL,$parm4 = NULL,$parm5 = NULL,$parm6 = NULL)

И назови это так

* * 1010

ОБНОВЛЕНИЕ от вашего комментария:

Ваш код:

function __construct(
    $userid, 
    $magicCookie, 
    $accessLvl = 'public', 
    $det       = 'basic', 
    $sortOrder = 'starttime', 
    $recurring = 'true', 
    $d_from    = "01/01/2011", 
    $d_to      = "31/01/2011", 
    $max       = "10") {
    // Code goes here...
} 

Так звать вот так

// After the seconds parameter you have default values
$obj = new Whatever(
    $userid, 
    $magicCookie
    );  

Что вы думаете об этом?

function __construct(
    $userid, 
    $magicCookie, 
    $accessLvl = NULL, 
    $det       = NULL, 
    $sortOrder = NULL, 
    $recurring = FALSE, 
    $d_from    = NULL, 
    $d_to      = NULL, 
    $max       = NULL) {
    // Code goes here... Yes set Defaults if NULL
}

Назовите это так:

$obj = new Whatever(
    $userid, 
    $magicCookie, 
    $accessLvl = 'public', 
    $det       = 'basic', 
    $sortOrder = 'starttime', 
    $recurring = TRUE, 
    $d_from    = "01/01/2011", 
    $d_to      = "31/01/2011", 
    $max       = 10);     
0 голосов
/ 17 ноября 2011

Решение, опубликованное Филом, вероятно, является тем, что вам нужно, в том, что вы не соблюдаете каждый параметр конструктора, даже если его значение не может быть.

Поскольку вы изучаете ООП, я хотел бы предложить вам альтернативное решение. За прошедшие годы я обнаружил, что передача параметров конструктору заканчивается в ситуациях, когда список аргументов становится громоздким. Рассмотрим этот пример (только для демонстрационных целей):

class Car
{
    public function __construct($color = NULL, $transmission = NULL, $bodyStyle = NULL, $interior = NULL, $engineType = NULL, $wheelSize = NULL, $radioType = NULL) {
        // Do stuff
    }
}

С длинным списком аргументов, переданных в arg, КАЖДЫЙ объект, который я создаю, должен проверить, чтобы убедиться, что я передаю значения в правильном порядке, что становится утомительно, если я некоторое время не видел код.

// Example 1
$myCar = new Car('blue', 'automatic', 'sedan', 'leather', 'v6', '18', 'xmBluetooth');

// Example 2
$myCar = new Car('green', 'manual', NULL, NULL, 'v8', NULL);

// Example 3
$myCar = new Car(NULL, NULL, 'sedan', NULL, NULL, NULL, NULL, 'cdPlayer');

Я бы порекомендовал использовать установщики для установки этих значений, а затем каждый раз, когда создается экземпляр объекта, необходимо задавать только необходимые значения без необходимости иметь дело с порядком записи в длинном списке аргументов.

class Car {
    protected $color;
    protected $bodyStyle;
    protected $transmission;
    protected $interior;
    protected $engineType;
    protected $wheelSize;
    protected $radioType;

    public function setColor($color) 
    {
        $this->color = $color;
    }

    public function setTransmission($transmission)
    {
        $this->transmission = $transmission;
    }


    // etc.
}

// Calling code
$myCar = new Car();
$myCar->setColor('green');
$myCar->setWheelSize('18');
$myCar->setInterior('leather');
$myCar->setEngineType('v6');

$yourCar = new Car();
$yourCar->setColor('black');

Просто о чем подумать.

0 голосов
/ 16 ноября 2011

Попробуйте передать пустые кавычки. Возможно, вам придется использовать логику в вашем конструкторе, чтобы проверить наличие пробелов и установить значение. Тройной оператор () ?: хороший выбор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...