Skip to content

Commit 490cc43

Browse files
committed
🛀 too many static calls in here
1 parent c99f5d4 commit 490cc43

File tree

12 files changed

+67
-57
lines changed

12 files changed

+67
-57
lines changed

phpstan-baseline.neon

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ parameters:
253253
path: tests/Data/DataInterfaceTestAbstract.php
254254

255255
-
256-
rawMessage: 'Parameter #1 $data of class chillerlan\QRCode\Data\Byte constructor expects string, string|false given.'
256+
rawMessage: 'Parameter #1 $data of class chillerlan\QRCode\Data\Byte constructor expects string|null, string|false given.'
257257
identifier: argument.type
258258
count: 1
259259
path: tests/Data/ECITest.php

src/Data/AlphaNum.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public function write(BitBuffer $bitBuffer, int $versionNumber):static{
4444

4545
$bitBuffer
4646
->put(self::DATAMODE, 4)
47-
->put($len, $this::getLengthBits($versionNumber))
47+
->put($len, $this->getLengthBits($versionNumber))
4848
;
4949

5050
// encode 2 characters in 11 bits
@@ -68,8 +68,8 @@ public function write(BitBuffer $bitBuffer, int $versionNumber):static{
6868
*
6969
* @throws \chillerlan\QRCode\Data\QRCodeDataException
7070
*/
71-
public static function decodeSegment(BitBuffer $bitBuffer, int $versionNumber):string{
72-
$length = $bitBuffer->read(self::getLengthBits($versionNumber));
71+
public function decodeSegment(BitBuffer $bitBuffer, int $versionNumber):string{
72+
$length = $bitBuffer->read($this->getLengthBits($versionNumber));
7373
$result = '';
7474
// Read two characters at a time
7575
while($length > 1){
@@ -79,8 +79,8 @@ public static function decodeSegment(BitBuffer $bitBuffer, int $versionNumber):s
7979
}
8080

8181
$nextTwoCharsBits = $bitBuffer->read(11);
82-
$result .= self::chr(intdiv($nextTwoCharsBits, 45));
83-
$result .= self::chr($nextTwoCharsBits % 45);
82+
$result .= $this->chr(intdiv($nextTwoCharsBits, 45));
83+
$result .= $this->chr($nextTwoCharsBits % 45);
8484
$length -= 2;
8585
}
8686

@@ -90,7 +90,7 @@ public static function decodeSegment(BitBuffer $bitBuffer, int $versionNumber):s
9090
throw new QRCodeDataException('not enough bits available'); // @codeCoverageIgnore
9191
}
9292

93-
$result .= self::chr($bitBuffer->read(6));
93+
$result .= $this->chr($bitBuffer->read(6));
9494
}
9595

9696
return $result;
@@ -113,7 +113,7 @@ private function ord(string $chr):int{
113113
/**
114114
* @throws \chillerlan\QRCode\Data\QRCodeDataException
115115
*/
116-
private static function chr(int $ord):string{
116+
private function chr(int $ord):string{
117117

118118
if($ord < 0 || $ord > 44){
119119
throw new QRCodeDataException('invalid character code'); // @codeCoverageIgnore

src/Data/Byte.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public function write(BitBuffer $bitBuffer, int $versionNumber):static{
3737

3838
$bitBuffer
3939
->put(self::DATAMODE, 4)
40-
->put($len, $this::getLengthBits($versionNumber))
40+
->put($len, $this->getLengthBits($versionNumber))
4141
;
4242

4343
$i = 0;
@@ -55,8 +55,8 @@ public function write(BitBuffer $bitBuffer, int $versionNumber):static{
5555
*
5656
* @throws \chillerlan\QRCode\Data\QRCodeDataException
5757
*/
58-
public static function decodeSegment(BitBuffer $bitBuffer, int $versionNumber):string{
59-
$length = $bitBuffer->read(self::getLengthBits($versionNumber));
58+
public function decodeSegment(BitBuffer $bitBuffer, int $versionNumber):string{
59+
$length = $bitBuffer->read($this->getLengthBits($versionNumber));
6060

6161
if($bitBuffer->available() < (8 * $length)){
6262
throw new QRCodeDataException('not enough bits available'); // @codeCoverageIgnore

src/Data/ECI.php

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -26,22 +26,26 @@ final class ECI extends QRDataModeAbstract{
2626
public const DATAMODE = Mode::ECI;
2727

2828
/**
29-
* The current ECI encoding id
29+
* The current ECI encoding id (default to UTF-8)
3030
*/
31-
private int $encoding;
31+
private int $encoding = ECICharset::ISO_IEC_10646_UTF_8;
3232

3333
/**
3434
* @inheritDoc
3535
* @throws \chillerlan\QRCode\Data\QRCodeDataException
3636
* @noinspection PhpMissingParentConstructorInspection
3737
*/
38-
public function __construct(int $encoding){
38+
public function __construct(int|null $encoding = null){
3939

40-
if($encoding < 0 || $encoding > 999999){
41-
throw new QRCodeDataException(sprintf('invalid encoding id: "%s"', $encoding));
40+
if($encoding !== null){
41+
42+
if($encoding < 0 || $encoding > 999999){
43+
throw new QRCodeDataException(sprintf('invalid encoding id: "%s"', $encoding));
44+
}
45+
46+
$this->encoding = $encoding;
4247
}
4348

44-
$this->encoding = $encoding;
4549
}
4650

4751
public function getLengthInBits():int{
@@ -76,7 +80,7 @@ public function write(BitBuffer $bitBuffer, int $versionNumber):static{
7680
$bitBuffer->put(($this->encoding | 0xC00000), 24);
7781
}
7882
else{
79-
throw new QRCodeDataException('invalid ECI ID');
83+
throw new QRCodeDataException('invalid ECI ID'); // @codeCoverageIgnore
8084
}
8185

8286
return $this;
@@ -87,7 +91,7 @@ public function write(BitBuffer $bitBuffer, int $versionNumber):static{
8791
*
8892
* @throws \chillerlan\QRCode\Data\QRCodeDataException
8993
*/
90-
public static function parseValue(BitBuffer $bitBuffer):ECICharset{
94+
public function parseValue(BitBuffer $bitBuffer):ECICharset{
9195
$firstByte = $bitBuffer->read(8);
9296

9397
// just one byte
@@ -121,23 +125,25 @@ public static function validateString(string $string):bool{
121125
*
122126
* @throws \chillerlan\QRCode\Data\QRCodeDataException
123127
*/
124-
public static function decodeSegment(BitBuffer $bitBuffer, int $versionNumber):string{
125-
$eciCharset = self::parseValue($bitBuffer);
128+
public function decodeSegment(BitBuffer $bitBuffer, int $versionNumber):string{
129+
$eciCharset = $this->parseValue($bitBuffer);
126130
$nextMode = $bitBuffer->read(4);
127131
$encoding = $eciCharset->getName();
128132

129133
// this is definitely weird, but there are QR Codes out in the wild
130134
// that have ECI followed by numeric and alphanum segments
131135
// @see https://github.com/chillerlan/php-qrcode/discussions/289
132-
$data = match($nextMode){
133-
Mode::NUMBER => Number::decodeSegment($bitBuffer, $versionNumber),
134-
Mode::ALPHANUM => AlphaNum::decodeSegment($bitBuffer, $versionNumber),
135-
Mode::BYTE => Byte::decodeSegment($bitBuffer, $versionNumber),
136+
$dataMode = match($nextMode){
137+
Mode::NUMBER => new Number,
138+
Mode::ALPHANUM => new AlphaNum,
139+
Mode::BYTE => new Byte,
136140
default => throw new QRCodeDataException(
137141
sprintf('ECI designator followed by invalid mode: "%04b"', $nextMode),
138142
),
139143
};
140144

145+
$data = $dataMode->decodeSegment($bitBuffer, $versionNumber);
146+
141147
if($encoding === null){
142148
// The spec isn't clear on this mode; see
143149
// section 6.4.5: it does not say which encoding to assuming

src/Data/Hanzi.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,8 @@ public function write(BitBuffer $bitBuffer, int $versionNumber):static{
125125

126126
$bitBuffer
127127
->put(self::DATAMODE, 4)
128-
->put($this::GB2312_SUBSET, 4)
129-
->put($this->getCharCount(), $this::getLengthBits($versionNumber))
128+
->put(self::GB2312_SUBSET, 4)
129+
->put($this->getCharCount(), $this->getLengthBits($versionNumber))
130130
;
131131

132132
$len = strlen($this->data);
@@ -159,14 +159,14 @@ public function write(BitBuffer $bitBuffer, int $versionNumber):static{
159159
*
160160
* @throws \chillerlan\QRCode\Data\QRCodeDataException
161161
*/
162-
public static function decodeSegment(BitBuffer $bitBuffer, int $versionNumber):string{
162+
public function decodeSegment(BitBuffer $bitBuffer, int $versionNumber):string{
163163

164164
// Hanzi mode contains a subset indicator right after mode indicator
165165
if($bitBuffer->read(4) !== self::GB2312_SUBSET){
166166
throw new QRCodeDataException('ecpected subset indicator for Hanzi mode');
167167
}
168168

169-
$length = $bitBuffer->read(self::getLengthBits($versionNumber));
169+
$length = $bitBuffer->read($this->getLengthBits($versionNumber));
170170

171171
if($bitBuffer->available() < ($length * 13)){
172172
throw new QRCodeDataException('not enough bits available');

src/Data/Kanji.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ public function write(BitBuffer $bitBuffer, int $versionNumber):static{
113113

114114
$bitBuffer
115115
->put(self::DATAMODE, 4)
116-
->put($this->getCharCount(), $this::getLengthBits($versionNumber))
116+
->put($this->getCharCount(), $this->getLengthBits($versionNumber))
117117
;
118118

119119
$len = strlen($this->data);
@@ -146,8 +146,8 @@ public function write(BitBuffer $bitBuffer, int $versionNumber):static{
146146
*
147147
* @throws \chillerlan\QRCode\Data\QRCodeDataException
148148
*/
149-
public static function decodeSegment(BitBuffer $bitBuffer, int $versionNumber):string{
150-
$length = $bitBuffer->read(self::getLengthBits($versionNumber));
149+
public function decodeSegment(BitBuffer $bitBuffer, int $versionNumber):string{
150+
$length = $bitBuffer->read($this->getLengthBits($versionNumber));
151151

152152
if($bitBuffer->available() < ($length * 13)){
153153
throw new QRCodeDataException('not enough bits available'); // @codeCoverageIgnore

src/Data/Number.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public function write(BitBuffer $bitBuffer, int $versionNumber):static{
3737

3838
$bitBuffer
3939
->put(self::DATAMODE, 4)
40-
->put($len, $this::getLengthBits($versionNumber))
40+
->put($len, $this->getLengthBits($versionNumber))
4141
;
4242

4343
$i = 0;
@@ -90,8 +90,8 @@ private function parseInt(string $string):int{
9090
*
9191
* @throws \chillerlan\QRCode\Data\QRCodeDataException
9292
*/
93-
public static function decodeSegment(BitBuffer $bitBuffer, int $versionNumber):string{
94-
$length = $bitBuffer->read(self::getLengthBits($versionNumber));
93+
public function decodeSegment(BitBuffer $bitBuffer, int $versionNumber):string{
94+
$length = $bitBuffer->read($this->getLengthBits($versionNumber));
9595
$result = '';
9696
// Read three digits at a time
9797
while($length >= 3){

src/Data/QRDataModeAbstract.php

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,21 +21,25 @@ abstract class QRDataModeAbstract implements QRDataModeInterface{
2121
/**
2222
* The data to write
2323
*/
24-
protected string $data;
24+
protected string $data = '';
2525

2626
/**
2727
* QRDataModeAbstract constructor.
2828
*
2929
* @throws \chillerlan\QRCode\Data\QRCodeDataException
3030
*/
31-
public function __construct(string $data){
32-
$data = $this::convertEncoding($data);
31+
public function __construct(string|null $data = null){
3332

34-
if(!$this::validateString($data)){
35-
throw new QRCodeDataException('invalid data');
33+
if($data !== null){
34+
$data = $this::convertEncoding($data);
35+
36+
if(!$this::validateString($data)){
37+
throw new QRCodeDataException('invalid data');
38+
}
39+
40+
$this->data = $data;
3641
}
3742

38-
$this->data = $data;
3943
}
4044

4145
/**
@@ -52,7 +56,7 @@ public static function convertEncoding(string $string):string{
5256
/**
5357
* shortcut
5458
*/
55-
protected static function getLengthBits(int $versionNumber):int{
59+
protected function getLengthBits(int $versionNumber):int{
5660
return Mode::getLengthBitsForVersion(static::DATAMODE, $versionNumber);
5761
}
5862

src/Data/QRDataModeInterface.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,6 @@ public function write(BitBuffer $bitBuffer, int $versionNumber):static;
5555
/**
5656
* reads a segment from the BitBuffer and decodes in the current data mode
5757
*/
58-
public static function decodeSegment(BitBuffer $bitBuffer, int $versionNumber):string;
58+
public function decodeSegment(BitBuffer $bitBuffer, int $versionNumber):string;
5959

6060
}

src/Decoder/Decoder.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -117,16 +117,16 @@ private function decodeBitStream(BitBuffer $bitBuffer):DecoderResult{
117117
break;
118118
}
119119
elseif($datamode === Mode::NUMBER){
120-
$result .= Number::decodeSegment($this->bitBuffer, $versionNumber);
120+
$result .= (new Number)->decodeSegment($this->bitBuffer, $versionNumber);
121121
}
122122
elseif($datamode === Mode::ALPHANUM){
123123
$result .= $this->decodeAlphanumSegment($versionNumber, $fc1InEffect);
124124
}
125125
elseif($datamode === Mode::BYTE){
126-
$result .= Byte::decodeSegment($this->bitBuffer, $versionNumber);
126+
$result .= (new Byte)->decodeSegment($this->bitBuffer, $versionNumber);
127127
}
128128
elseif($datamode === Mode::KANJI){
129-
$result .= Kanji::decodeSegment($this->bitBuffer, $versionNumber);
129+
$result .= (new Kanji)->decodeSegment($this->bitBuffer, $versionNumber);
130130
}
131131
elseif($datamode === Mode::STRCTURED_APPEND){
132132

@@ -143,10 +143,10 @@ private function decodeBitStream(BitBuffer $bitBuffer):DecoderResult{
143143
$fc1InEffect = true;
144144
}
145145
elseif($datamode === Mode::ECI){
146-
$result .= ECI::decodeSegment($this->bitBuffer, $versionNumber);
146+
$result .= (new ECI)->decodeSegment($this->bitBuffer, $versionNumber);
147147
}
148148
elseif($datamode === Mode::HANZI){
149-
$result .= Hanzi::decodeSegment($this->bitBuffer, $versionNumber);
149+
$result .= (new Hanzi)->decodeSegment($this->bitBuffer, $versionNumber);
150150
}
151151
else{
152152
throw new QRCodeDecoderException('invalid data mode');
@@ -167,7 +167,7 @@ private function decodeBitStream(BitBuffer $bitBuffer):DecoderResult{
167167
}
168168

169169
private function decodeAlphanumSegment(int $versionNumber, bool $fc1InEffect):string{
170-
$str = AlphaNum::decodeSegment($this->bitBuffer, $versionNumber);
170+
$str = (new AlphaNum)->decodeSegment($this->bitBuffer, $versionNumber);
171171

172172
// See section 6.4.8.1, 6.4.8.2
173173
if($fc1InEffect){ // ???

0 commit comments

Comments
 (0)