<?php

namespace StructType;

use \WsdlToPhp\PackageBase\AbstractStructBase;

/**
 * This class stands for IndividualVehicleMeasurements StructType
 * @subpackage Structs
 */
class IndividualVehicleMeasurements extends TrafficValue
{
    /**
     * The vehicleSpeed
     * Meta informations extracted from the WSDL
     * - minOccurs: 0
     * @var \StructType\VehicleSpeed
     */
    public $vehicleSpeed;
    /**
     * The vehicleDetectionTime
     * Meta informations extracted from the WSDL
     * - minOccurs: 0
     * @var \StructType\VehicleDetectionTime
     */
    public $vehicleDetectionTime;
    /**
     * The vehicleHeadway
     * Meta informations extracted from the WSDL
     * - minOccurs: 0
     * @var \StructType\VehicleHeadway
     */
    public $vehicleHeadway;
    /**
     * The individualVehicleMeasurementsExtension
     * Meta informations extracted from the WSDL
     * - minOccurs: 0
     * @var \StructType\ExtensionType
     */
    public $individualVehicleMeasurementsExtension;
    /**
     * Constructor method for IndividualVehicleMeasurements
     * @uses IndividualVehicleMeasurements::setVehicleSpeed()
     * @uses IndividualVehicleMeasurements::setVehicleDetectionTime()
     * @uses IndividualVehicleMeasurements::setVehicleHeadway()
     * @uses IndividualVehicleMeasurements::setIndividualVehicleMeasurementsExtension()
     * @param \StructType\VehicleSpeed $vehicleSpeed
     * @param \StructType\VehicleDetectionTime $vehicleDetectionTime
     * @param \StructType\VehicleHeadway $vehicleHeadway
     * @param \StructType\ExtensionType $individualVehicleMeasurementsExtension
     */
    public function __construct(\StructType\VehicleSpeed $vehicleSpeed = null, \StructType\VehicleDetectionTime $vehicleDetectionTime = null, \StructType\VehicleHeadway $vehicleHeadway = null, \StructType\ExtensionType $individualVehicleMeasurementsExtension = null)
    {
        $this
            ->setVehicleSpeed($vehicleSpeed)
            ->setVehicleDetectionTime($vehicleDetectionTime)
            ->setVehicleHeadway($vehicleHeadway)
            ->setIndividualVehicleMeasurementsExtension($individualVehicleMeasurementsExtension);
    }
    /**
     * Get vehicleSpeed value
     * @return \StructType\VehicleSpeed|null
     */
    public function getVehicleSpeed()
    {
        return $this->vehicleSpeed;
    }
    /**
     * Set vehicleSpeed value
     * @param \StructType\VehicleSpeed $vehicleSpeed
     * @return \StructType\IndividualVehicleMeasurements
     */
    public function setVehicleSpeed(\StructType\VehicleSpeed $vehicleSpeed = null)
    {
        $this->vehicleSpeed = $vehicleSpeed;
        return $this;
    }
    /**
     * Get vehicleDetectionTime value
     * @return \StructType\VehicleDetectionTime|null
     */
    public function getVehicleDetectionTime()
    {
        return $this->vehicleDetectionTime;
    }
    /**
     * Set vehicleDetectionTime value
     * @param \StructType\VehicleDetectionTime $vehicleDetectionTime
     * @return \StructType\IndividualVehicleMeasurements
     */
    public function setVehicleDetectionTime(\StructType\VehicleDetectionTime $vehicleDetectionTime = null)
    {
        $this->vehicleDetectionTime = $vehicleDetectionTime;
        return $this;
    }
    /**
     * Get vehicleHeadway value
     * @return \StructType\VehicleHeadway|null
     */
    public function getVehicleHeadway()
    {
        return $this->vehicleHeadway;
    }
    /**
     * Set vehicleHeadway value
     * @param \StructType\VehicleHeadway $vehicleHeadway
     * @return \StructType\IndividualVehicleMeasurements
     */
    public function setVehicleHeadway(\StructType\VehicleHeadway $vehicleHeadway = null)
    {
        $this->vehicleHeadway = $vehicleHeadway;
        return $this;
    }
    /**
     * Get individualVehicleMeasurementsExtension value
     * @return \StructType\ExtensionType|null
     */
    public function getIndividualVehicleMeasurementsExtension()
    {
        return $this->individualVehicleMeasurementsExtension;
    }
    /**
     * Set individualVehicleMeasurementsExtension value
     * @param \StructType\ExtensionType $individualVehicleMeasurementsExtension
     * @return \StructType\IndividualVehicleMeasurements
     */
    public function setIndividualVehicleMeasurementsExtension(\StructType\ExtensionType $individualVehicleMeasurementsExtension = null)
    {
        $this->individualVehicleMeasurementsExtension = $individualVehicleMeasurementsExtension;
        return $this;
    }
    /**
     * Method called when an object has been exported with var_export() functions
     * It allows to return an object instantiated with the values
     * @see AbstractStructBase::__set_state()
     * @uses AbstractStructBase::__set_state()
     * @param array $array the exported values
     * @return \StructType\IndividualVehicleMeasurements
     */
    public static function __set_state(array $array)
    {
        return parent::__set_state($array);
    }
    /**
     * Method returning the class name
     * @return string __CLASS__
     */
    public function __toString()
    {
        return __CLASS__;
    }
}
