Conditions | 10 |
Paths | 26 |
Total Lines | 65 |
Lines | 0 |
Ratio | 0 % |
Changes | 0 |
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
1 | <?php |
||
44 | public function call(string $method, $payload, int $flags = 0) |
||
45 | { |
||
46 | $header = $method . pack('P', $this->seq); |
||
47 | if (!$this->relay instanceof SendPackageRelayInterface) { |
||
48 | $this->relay->send($header, Relay::PAYLOAD_CONTROL | Relay::PAYLOAD_RAW); |
||
49 | } |
||
50 | |||
51 | if ($flags & Relay::PAYLOAD_RAW && is_scalar($payload)) { |
||
52 | if (!$this->relay instanceof SendPackageRelayInterface) { |
||
53 | $this->relay->send((string)$payload, $flags); |
||
54 | } else { |
||
55 | $this->relay->sendPackage( |
||
56 | $header, |
||
57 | Relay::PAYLOAD_CONTROL | Relay::PAYLOAD_RAW, |
||
58 | (string)$payload, |
||
59 | $flags |
||
60 | ); |
||
61 | } |
||
62 | } else { |
||
63 | $body = json_encode($payload); |
||
64 | if ($body === false) { |
||
65 | throw new Exceptions\ServiceException( |
||
66 | sprintf( |
||
67 | 'json encode: %s', |
||
68 | json_last_error_msg() |
||
69 | ) |
||
70 | ); |
||
71 | } |
||
72 | |||
73 | if (!$this->relay instanceof SendPackageRelayInterface) { |
||
74 | $this->relay->send($body); |
||
75 | } else { |
||
76 | $this->relay->sendPackage($header, Relay::PAYLOAD_CONTROL | Relay::PAYLOAD_RAW, $body); |
||
77 | } |
||
78 | } |
||
79 | |||
80 | $body = (string)$this->relay->receiveSync($flags); |
||
81 | |||
82 | if (!($flags & Relay::PAYLOAD_CONTROL)) { |
||
83 | throw new Exceptions\TransportException('rpc response header is missing'); |
||
84 | } |
||
85 | |||
86 | $rpc = unpack('Ps', substr($body, -8)); |
||
87 | $rpc['m'] = substr($body, 0, -8); |
||
88 | |||
89 | if ($rpc['m'] !== $method || $rpc['s'] !== $this->seq) { |
||
90 | throw new Exceptions\TransportException( |
||
91 | sprintf( |
||
92 | 'rpc method call, expected %s:%d, got %s%d', |
||
93 | $method, |
||
94 | $this->seq, |
||
95 | $rpc['m'], |
||
96 | $rpc['s'] |
||
97 | ) |
||
98 | ); |
||
99 | } |
||
100 | |||
101 | // request id++ |
||
102 | $this->seq++; |
||
103 | |||
104 | // wait for the response |
||
105 | $body = (string)$this->relay->receiveSync($flags); |
||
106 | |||
107 | return $this->handleBody($body, $flags); |
||
108 | } |
||
109 | |||
138 |
Let’s assume that you have a directory layout like this:
and let’s assume the following content of
Bar.php
:If both files
OtherDir/Foo.php
andSomeDir/Foo.php
are loaded in the same runtime, you will see a PHP error such as the following:PHP Fatal error: Cannot use SomeDir\Foo as Foo because the name is already in use in OtherDir/Foo.php
However, as
OtherDir/Foo.php
does not necessarily have to be loaded and the error is only triggered if it is loaded beforeOtherDir/Bar.php
, this problem might go unnoticed for a while. In order to prevent this error from surfacing, you must import the namespace with a different alias: