‪TYPO3CMS  ‪main
TYPO3\CMS\Extbase\Reflection\ObjectAccess Class Reference

Static Public Member Functions

static mixed getProperty (object|array $subject, string $propertyName)
 
static mixed getPropertyInternal (object|array $subject, string $propertyName)
 
static mixed getPropertyPath (object|array $subject, string $propertyPath)
 
static bool setProperty (object|array &$subject, string $propertyName, mixed $propertyValue)
 
static list< string > getGettablePropertyNames (object $object)
 
static list< string > getSettablePropertyNames (object $object)
 
static isPropertySettable (object $object, string $propertyName)
 
static isPropertyGettable (object|array $object, string $propertyName)
 
static array< string, getGettableProperties(object $object):array { $properties=[];foreach(self::getGettablePropertyNames( $object) as $propertyName) { $properties[ $propertyName]=self::getPropertyInternal( $object, $propertyName);} return $properties;} private static function createAccessor():PropertyAccessor { if(self::$propertyAccessor===null) { self::$propertyAccessor=PropertyAccess::createPropertyAccessorBuilder() -> enableExceptionOnInvalidIndex () -> getPropertyAccessor()
 

Static Private Member Functions

static getObjectPropertyValue (object $subject, PropertyPath $propertyPath)
 
static getArrayIndexValue (array $subject, PropertyPath $propertyPath)
 
static convertToArrayPropertyPath (PropertyPath $propertyPath)
 
static wrap (string $segment)
 

Static Private Attributes

static PropertyAccessorInterface null $propertyAccessor = null
 

Detailed Description

Provides methods to call appropriate getter/setter on an object given the property name. It does this following these rules:

  • ‪if the target object is an instance of ArrayAccess, it gets/sets the property
  • ‪if public getter/setter method exists, call it.
  • ‪if public property exists, return/set the value of it.
  • ‪else, throw exception

only to be used within Extbase, not part of TYPO3 Core API.

Definition at line 38 of file ObjectAccess.php.

Member Function Documentation

◆ convertToArrayPropertyPath()

static TYPO3\CMS\Extbase\Reflection\ObjectAccess::convertToArrayPropertyPath ( PropertyPath  $propertyPath)
staticprivate

◆ enableExceptionOnInvalidIndex()

static array<string, getGettableProperties(object $object): array { $properties = []; foreach (self::getGettablePropertyNames($object) as $propertyName) { $properties[$propertyName] = self::getPropertyInternal($object, $propertyName); } return $properties; } private static function createAccessor(): PropertyAccessor { if (self::$propertyAccessor === null) { self::$propertyAccessor = PropertyAccess::createPropertyAccessorBuilder() -> TYPO3\CMS\Extbase\Reflection\ObjectAccess::enableExceptionOnInvalidIndex ( ) -> getPropertyAccessor()
static

Get all properties (names and their current values) of the current $object that are accessible through this class.

Parameters
object$object‪Object to get all properties from.
Exceptions

◆ getArrayIndexValue()

static TYPO3\CMS\Extbase\Reflection\ObjectAccess::getArrayIndexValue ( array  $subject,
PropertyPath  $propertyPath 
)
staticprivate

◆ getGettablePropertyNames()

static list<string> TYPO3\CMS\Extbase\Reflection\ObjectAccess::getGettablePropertyNames ( object  $object)
static

Returns an array of properties which can be get with the getProperty() method. Includes the following properties:

  • ‪which can be get through a public getter method.
  • ‪public properties which can be directly get.
Parameters
object$object‪Object to receive property names for
Returns
‪list<string> Array of all gettable property names
Exceptions
Exception

Definition at line 185 of file ObjectAccess.php.

Referenced by TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getGettablePropertyNamesRespectsMethodArguments(), TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getGettablePropertyNamesReturnsAllPropertiesWhichAreAvailable(), and TYPO3\CMS\Extbase\Mvc\View\JsonView\transformObject().

◆ getObjectPropertyValue()

static TYPO3\CMS\Extbase\Reflection\ObjectAccess::getObjectPropertyValue ( object  $subject,
PropertyPath  $propertyPath 
)
staticprivate

◆ getProperty()

static mixed TYPO3\CMS\Extbase\Reflection\ObjectAccess::getProperty ( object|array  $subject,
string  $propertyName 
)
static

Get a property of a given object. Tries to get the property the following ways:

  • ‪if the target is an array, and has this property, we call it.
  • ‪if public getter method exists, call it.
  • ‪if the target object is an instance of ArrayAccess, it gets the property on it if it exists.
  • ‪if public property exists, return the value of it.
  • ‪else, throw exception
Parameters
object | array$subject‪Object or array to get the property from
string$propertyName‪name of the property to retrieve
Exceptions

Definition at line 59 of file ObjectAccess.php.

References TYPO3\CMS\Extbase\Reflection\ObjectAccess\getPropertyInternal().

Referenced by TYPO3\CMS\Extbase\Persistence\Generic\Backend\determineStoragePageIdForNewRecord(), TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getPropertyCanAccessPropertiesOfAnArray(), TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getPropertyCanAccessPropertiesOfAnArrayObject(), TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getPropertyCanAccessPropertiesOfAnObjectImplementingArrayAccess(), TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getPropertyCanAccessPropertiesOfAnObjectStorageObject(), TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getPropertyCanAccessPropertiesOfArrayAccessWithGetterMethodWhenOffsetNotExists(), TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getPropertyCanAccessPropertiesOfArrayAccessWithPriorityForOffsetIfOffsetExists(), TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getPropertyReturnsExpectedValueForGetterProperty(), TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getPropertyReturnsExpectedValueForPublicProperty(), TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getPropertyReturnsNullIfArrayKeyDoesNotExist(), TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getPropertyThrowsExceptionIfPropertyDoesNotExist(), TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getPropertyTriesToCallABooleanGetterMethodIfItExists(), TYPO3\CMS\Extbase\Validation\Validator\AbstractGenericObjectValidator\getPropertyValue(), TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\isPropertyGettableWorksOnObjectsMixingRegularPropertiesAndArrayAccess(), and TYPO3\CMS\Extbase\Mvc\View\JsonView\transformObject().

◆ getPropertyInternal()

static mixed TYPO3\CMS\Extbase\Reflection\ObjectAccess::getPropertyInternal ( object|array  $subject,
string  $propertyName 
)
static

Gets a property of a given object or array. This is an internal method that does only limited type checking for performance reasons. If you can't make sure that $subject is either of type array or object and $propertyName of type string you should use getProperty() instead.

See also
getProperty()
Parameters
object | array$subject‪Object or array to get the property from
string$propertyName‪name of the property to retrieve
Exceptions
Exception

Definition at line 82 of file ObjectAccess.php.

References TYPO3\CMS\Extbase\Reflection\ObjectAccess\convertToArrayPropertyPath(), TYPO3\CMS\Extbase\Reflection\ObjectAccess\getArrayIndexValue(), and TYPO3\CMS\Extbase\Reflection\ObjectAccess\getObjectPropertyValue().

Referenced by TYPO3\CMS\Extbase\Reflection\ObjectAccess\getProperty(), TYPO3\CMS\Extbase\Reflection\ObjectAccess\getPropertyPath(), and TYPO3\CMS\Extbase\Tests\Functional\Persistence\QueryLocalizedDataTest\getPropertyPath().

◆ getPropertyPath()

static mixed TYPO3\CMS\Extbase\Reflection\ObjectAccess::getPropertyPath ( object|array  $subject,
string  $propertyPath 
)
static

Gets a property path from a given object or array.

If propertyPath is "bla.blubb", then we first call getProperty($object, 'bla'), and on the resulting object we call getProperty(..., 'blubb')

For arrays the keys are checked likewise.

Parameters
object | array$subject‪Object or array to get the property path from
string$propertyPath
Returns
‪mixed Value of the property

Definition at line 128 of file ObjectAccess.php.

References TYPO3\CMS\Extbase\Reflection\ObjectAccess\getPropertyInternal().

Referenced by TYPO3\CMS\Fluid\ViewHelpers\Form\AbstractFormFieldViewHelper\addAdditionalIdentityPropertiesIfNeeded(), TYPO3\CMS\Form\Domain\Model\FormDefinition\getElementDefaultValueByIdentifier(), TYPO3\CMS\Fluid\ViewHelpers\Form\AbstractFormFieldViewHelper\getLastSubmittedFormData(), TYPO3\CMS\Fluid\ViewHelpers\Form\SelectViewHelper\getOptions(), TYPO3\CMS\Fluid\ViewHelpers\Form\SelectViewHelper\getOptionValueScalar(), TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getPropertyPathCanAccessPropertiesOfAnArray(), TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getPropertyPathCanAccessPropertiesOfAnExtbaseObjectStorageObject(), TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getPropertyPathCanAccessPropertiesOfAnObjectImplementingArrayAccess(), TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getPropertyPathCanAccessPropertiesOfAnSplObjectStorageObject(), TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getPropertyPathCanRecursivelyGetPropertiesOfAnObject(), TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getPropertyPathOnObjectStorageDoesNotAffectOngoingLoop(), TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getPropertyPathOnSplObjectStorageDoesNotAffectOngoingLoop(), TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getPropertyPathReturnsNullForNonExistingPropertyPath(), TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getPropertyPathReturnsNullIfSubjectOnPathIsNoObject(), TYPO3\CMS\Fluid\ViewHelpers\Form\AbstractFormFieldViewHelper\getPropertyValue(), TYPO3\CMS\Form\Domain\Condition\Functions\FormConditionFunctionsProvider\getRootFormPropertyFunction(), and TYPO3\CMS\Form\Domain\Finishers\AbstractFinisher\resolveRuntimeReference().

◆ getSettablePropertyNames()

static list<string> TYPO3\CMS\Extbase\Reflection\ObjectAccess::getSettablePropertyNames ( object  $object)
static

Returns an array of properties which can be set with the setProperty() method. Includes the following properties:

  • ‪which can be set through a public setter method.
  • ‪public properties which can be directly set.
Parameters
object$object‪Object to receive property names for
Exceptions

Definition at line 281 of file ObjectAccess.php.

Referenced by TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getSettablePropertyNamesReturnsAllPropertiesWhichAreAvailable(), and TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getSettablePropertyNamesReturnsPropertyNamesOfStdClass().

◆ isPropertyGettable()

◆ isPropertySettable()

static TYPO3\CMS\Extbase\Reflection\ObjectAccess::isPropertySettable ( object  $object,
string  $propertyName 
)
static

Tells if the value of the specified property can be set by this Object Accessor.

Parameters
object$object‪Object containing the property
string$propertyName‪Name of the property to check

Definition at line 316 of file ObjectAccess.php.

Referenced by TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\isPropertySettableTellsIfAPropertyCanBeSet(), and TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\isPropertySettableWorksOnStdClass().

◆ setProperty()

static bool TYPO3\CMS\Extbase\Reflection\ObjectAccess::setProperty ( object|array &  $subject,
string  $propertyName,
mixed  $propertyValue 
)
static

Set a property for a given object. Tries to set the property the following ways:

  • ‪if target is an array, set value
  • ‪if super cow powers should be used, set value through reflection
  • ‪if public setter method exists, call it.
  • ‪if public property exists, set it directly.
  • ‪if the target object is an instance of ArrayAccess, it sets the property on it without checking if it existed.
  • ‪else, return FALSE
Parameters
object | array$subject‪The target object or array
string$propertyName‪Name of the property to set
mixed$propertyValue‪Value of the property
Exceptions

Definition at line 158 of file ObjectAccess.php.

Referenced by TYPO3\CMS\Extbase\Property\TypeConverter\PersistentObjectConverter\convertFrom(), TYPO3\CMS\Extbase\Property\TypeConverter\ObjectConverter\convertFrom(), TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\setPropertyCallsASetterMethodToSetThePropertyValueIfOneIsAvailable(), TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\setPropertyCanDirectlySetValuesInAnArrayObjectOrArray(), TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\setPropertyReturnsFalseIfPropertyIsNotAccessible(), and TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\setPropertyWorksWithPublicProperty().

◆ wrap()

static TYPO3\CMS\Extbase\Reflection\ObjectAccess::wrap ( string  $segment)
staticprivate

Member Data Documentation

◆ $propertyAccessor

PropertyAccessorInterface null TYPO3\CMS\Extbase\Reflection\ObjectAccess::$propertyAccessor = null
staticprivate

Definition at line 40 of file ObjectAccess.php.