1: <?php
2: namespace Pharborist\Objects;
3:
4: use Pharborist\Parser;
5: use Pharborist\Token;
6: use Pharborist\TokenNode;
7:
8: 9: 10:
11: class ClassNode extends SingleInheritanceNode {
12: 13: 14:
15: protected $abstract;
16:
17: 18: 19:
20: protected $final;
21:
22: 23: 24: 25:
26: public static function create($class_name) {
27: $class_node = Parser::parseSnippet("class $class_name {}")->remove();
28: return $class_node;
29: }
30:
31: 32: 33:
34: public function getAbstract() {
35: return $this->abstract;
36: }
37:
38: 39: 40: 41:
42: public function setAbstract($is_abstract) {
43: if ($is_abstract) {
44: if (!isset($this->abstract)) {
45: $this->abstract = Token::_abstract();
46: $this->prepend([
47: $this->abstract,
48: Token::space(),
49: ]);
50: $this->setFinal(FALSE);
51: }
52: }
53: else {
54: if (isset($this->abstract)) {
55:
56: $this->abstract->next()->remove();
57:
58: $this->abstract->remove();
59: }
60: }
61: return $this;
62: }
63:
64: 65: 66:
67: public function getFinal() {
68: return $this->final;
69: }
70:
71: 72: 73: 74:
75: public function setFinal($is_final) {
76: if ($is_final) {
77: if (!isset($this->final)) {
78: $this->final = Token::_final();
79: $this->prepend([
80: $this->final,
81: Token::space(),
82: ]);
83: $this->setAbstract(FALSE);
84: }
85: }
86: else {
87: if (isset($this->final)) {
88:
89: $this->final->next()->remove();
90:
91: $this->final->remove();
92: }
93: }
94: return $this;
95: }
96: }
97: