1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
namespace Graze\CiffRenderer\Parser\FieldParser; |
4
|
|
|
|
5
|
|
|
use Graze\CiffRenderer\Parser\SimpleXmlElement\SimpleXmlElementInterface; |
6
|
|
|
use Graze\CiffRenderer\Parser\FieldType; |
7
|
|
|
use Graze\CiffRenderer\Parser\FieldParser\FieldParserFixedText; |
8
|
|
|
use Graze\CiffRenderer\Parser\FieldParser\FieldParserBarcode; |
9
|
|
|
use Graze\CiffRenderer\Parser\FieldParser\FieldParserDate; |
10
|
|
|
use Graze\CiffRenderer\Parser\FieldParser\FieldParserDateOffset; |
11
|
|
|
use Graze\CiffRenderer\Parser\FieldParser\FieldParserStaticGraphic; |
12
|
|
|
use Graze\CiffRenderer\Parser\FieldParser\FieldParserGraphicPrimitive; |
13
|
|
|
use Graze\CiffRenderer\Exception\UnsupportedFieldTypeException; |
14
|
|
|
|
15
|
|
|
class FieldParserFactory |
16
|
|
|
{ |
17
|
|
|
/** |
18
|
|
|
* @param SimpleXmlElementInterface $xml |
19
|
|
|
* @return FieldParserInterface |
20
|
|
|
*/ |
21
|
7 |
|
public function getFieldParser(SimpleXmlElementInterface $xml) |
22
|
|
|
{ |
23
|
7 |
|
switch ((string) $xml->FldType) { // @codingStandardsIgnoreLine |
|
|
|
|
24
|
7 |
|
case FieldType::FIELD_FIXED_TEXT: |
25
|
6 |
|
case FieldType::FIELD_MERGE_FIELD: |
26
|
2 |
|
$className = FieldParserFixedText::class; |
27
|
2 |
|
break; |
28
|
|
|
|
29
|
5 |
|
case FieldType::FIELD_BARCODE: |
30
|
1 |
|
$className = FieldParserBarcode::class; |
31
|
1 |
|
break; |
32
|
|
|
|
33
|
4 |
|
case FieldType::FIELD_DATE: |
34
|
1 |
|
$className = FieldParserDate::class; |
35
|
1 |
|
break; |
36
|
|
|
|
37
|
3 |
|
case FieldType::FIELD_OFFSET_DATE: |
38
|
1 |
|
$className = FieldParserDateOffset::class; |
39
|
1 |
|
break; |
40
|
|
|
|
41
|
2 |
|
case FieldType::FIELD_STATIC_GRAPHIC: |
42
|
1 |
|
$className = FieldParserStaticGraphic::class; |
43
|
1 |
|
break; |
44
|
|
|
|
45
|
1 |
|
case FieldType::FIELD_GRAPHIC_PRIMITIVE: |
46
|
1 |
|
$className = FieldParserGraphicPrimitive::class; |
47
|
1 |
|
break; |
48
|
|
|
|
49
|
|
|
default: |
50
|
|
|
throw new UnsupportedFieldTypeException($fieldType); |
51
|
|
|
break; |
|
|
|
|
52
|
|
|
} |
53
|
|
|
|
54
|
7 |
|
return $className::factory(); |
55
|
|
|
} |
56
|
|
|
} |
57
|
|
|
|
If you access a property on an interface, you most likely code against a concrete implementation of the interface.
Available Fixes
Adding an additional type check:
Changing the type hint: