Detects null pointer issues in PHP code. Finds property/method access on null, missing null checks, nullable returns without handling, optional chaining gaps.
From accnpx claudepluginhub dykyi-roman/awesome-claude-code --plugin accThis skill uses the workspace's default tool permissions.
Analyze PHP code for null pointer dereference issues.
// BUG: No null check after find
$user = $repository->find($id);
$user->getName(); // May be null
// BUG: Chained calls on nullable
$order = $this->orderRepository->findByUser($userId);
$order->getItems()->first()->getProduct(); // Multiple null risks
// BUG: Direct access to optional array key
$name = $data['user']['name']; // May not exist
// FIXED:
$name = $data['user']['name'] ?? 'default';
// Type hint: public function getUser(): ?User
// BUG: No null handling
$user = $service->getUser();
echo $user->getEmail(); // $user may be null
// FIXED:
$user = $service->getUser();
if ($user !== null) {
echo $user->getEmail();
}
// BUG: first() on potentially empty collection
$items = $repository->findByStatus('active');
$first = $items->first(); // Returns false/null if empty
$first->process(); // Crash if empty
// FIXED:
$first = $items->first();
if ($first !== null) {
$first->process();
}
// BUG: Inconsistent null safety
$name = $user?->getProfile()->getName(); // getProfile may return null
// FIXED:
$name = $user?->getProfile()?->getName();
// BUG: Uninitialized property access
class Order {
private ?Customer $customer;
public function getCustomerName(): string {
return $this->customer->getName(); // $customer not initialized
}
}
// BUG: Relationship may be null
$order->getCustomer()->getAddress(); // Customer may be null
// BUG: Collection method on null relation
$user->getOrders()->filter(...); // getOrders may return null
# Nullable return types
Grep: "function\s+\w+\([^)]*\)\s*:\s*\?" --glob "**/*.php"
# find() without null check
Grep: "->find\([^)]+\)\s*;" --glob "**/*.php"
# Chained calls after nullable
Grep: "\?>\w+\([^)]*\)->\w+" --glob "**/*.php"
# first()/last() usage
Grep: "->(first|last)\(\)\s*->" --glob "**/*.php"
| Pattern | Severity |
|---|---|
| find() without null check | 🟠Major |
| Chained calls on nullable | 🟠Major |
| first()/last() on collection | 🟡 Minor |
| Missing null coalescing | 🟡 Minor |
| Uninitialized property | 🔴 Critical |
### Null Pointer: [Description]
**Severity:** 🔴/🟠/🟡
**Location:** `file.php:line`
**Type:** [Nullable Return|Missing Check|Chained Access|...]
**Issue:**
Variable may be null when accessed.
**Code:**
```php
// Problematic code
Fix:
// With null check
Provides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.