SoruPHP Tipi Hinting Uygulama - Depo Desen
bir maket/depo desen kullanarak PhpStorm içindeki satır kod tamamlama almak mümkün mü?
My Kur
Ben laravel kullanarak ve bir Laracasts videoda anlatıldığı gibi depo desen uygulamak.
Kod İşte
modelleri laravel içeride nasıl çalıştığını temel bir örnektir ve modeli niteliklerini kodu tamamlanması için almak imkansız görünüyor nasıl.
Bu kod çalışır ve bununla birlikte nitelik $ name ima tipi değildir ve kod tamamlandı PhpStorm içeride olmayacak 'Billy' olması gerektiği gibi dışarı yazdırır. Tür ipucu, çocuktan ziyade ana özellik tanımı türüne öncelik verir, bu bana garip geliyor.
<?php
// Models
abstract class Model {
public $sqlTableName;
public function findFromDatabase($id)
{
$model = new $this;
// This would be grabbed using table name and $id
$fakeDatabaseRow = ['name' => 'billy', 'job' => 'engineer'];
foreach ($fakeDatabaseRow as $column => $value) {
$model->$column = $value;
}
return $model;
}
}
class User extends Model {
public $name;
public $job;
public $sqlTableName = 'users';
}
// Repositories
abstract class RepositoryBase {
/**
* @var Model
*/
public $model;
public function find($id)
{
$this->model = $this->model->findFromDatabase(1);
return $this->model;
}
}
class UserRepository extends RepositoryBase {
/**
* @var User
*/
public $model;
public function __construct(User $model)
{
$this->model = $model;
}
}
// Run
$model = new User();
$userRepository = new UserRepository($model);
echo $userRepository->find(1)->name;
aslında kod tamamlama olsun sadece An Çirkin Fix
yeni php doc bloğu ile çocuk işlevini yeniden tanımlamak için gibi görünüyor:
class UserRepository extends RepositoryBase {
/**
* @var User
*/
public $model;
public function __construct(User $model)
{
$this->model = $model;
}
// I need to replace this function for every different repository
// even though they are all the same
/**
* @param $id
* @return User
*/
public function find($id)
{
return parent::find($id);
}
}
Ancak yüzlerce modelim, depolarım ve depo işlevlerim var. Her bir uygulamanın içindeki tüm fonksiyonları yeniden yazmak büyük bir iş olacaktır.
PhpStorm'un, yöntemi yeniden bildirmek zorunda kalmadan, ebeveyn tiplerinden ziyade çocuğun ipucu bildirimini kullanması için bir yol var mı?
Sınıf için PHPDoc'ta '@ method' deneyin. – LazyOne
@LazyOne - UserRepository belgesine @@method User find ($ id) 'eklediğimde işe yarar. Ancak yine de her depo için ve bir model döndüren her işlev için bunu yapmam gerektiği anlamına gelir. – magnito
'¯ \\ _ (ツ) _/¯' 1) en azından bunu yeniden beyan etmeyin 2) Başka yolu bilmiyorum 3) belki Laravel destek eklentisi bunu yapabilir (eğer henüz kurmadıysanız)) – LazyOne