1: <?php
2:
3: namespace Charcoal\Object;
4:
5: use \InvalidArgumentException;
6:
7: /**
8: * Defines objects that can be associated to one or more categories.
9: *
10: * Basic implementation of {@see \Charcoal\Object\CategorizableMultipleInterface}.
11: *
12: * @see \Charcoal\Object\CategoryInterface Accepted interface.
13: */
14: trait CategorizableMultipleTrait
15: {
16: /**
17: * The type of category the object can belong to.
18: *
19: * @var string
20: */
21: private $categoryType;
22:
23: /**
24: * One or more categories the object belongs to.
25: *
26: * @var (mixed|CategoryInterface)[]|Traversable
27: */
28: protected $categories;
29:
30: /**
31: * Set the type of category the object can belong to.
32: *
33: * @param string $type The category type.
34: * @throws InvalidArgumentException If the type argument is not a string.
35: * @return CategorizableMultipleInterface Chainable
36: */
37: public function setCategoryType($type)
38: {
39: if (!is_string($type)) {
40: throw new InvalidArgumentException(
41: 'Category type must be a string.'
42: );
43: }
44:
45: $this->categoryType = $type;
46:
47: return $this;
48: }
49:
50: /**
51: * Retrieve the type of category the object can belong to.
52: *
53: * @return string
54: */
55: public function categoryType()
56: {
57: return $this->categoryType;
58: }
59:
60: /**
61: * Set the categories the object belongs to.
62: *
63: * @param array|Traversable $categories The object's categories.
64: * @return CategorizableMultipleInterface Chainable
65: */
66: public function setCategories($categories)
67: {
68: $this->categories = $categories;
69:
70: return $this;
71: }
72:
73: /**
74: * Retrieve the categories the object belongs to.
75: *
76: * @return array|Traversable
77: */
78: public function categories()
79: {
80: return $this->categories;
81: }
82: }
83: