在PhpStorm中是否有任何可能性来映射它之间的动态生成功能的使用?
假设我有下一个代码:
<?php
class TestExample {
public function __construct($component) {
$component_parts = $this->get_dynamic_component_part_list($component);
$this->load_component_parts($component, $component_parts);
}
private function get_dynamic_component_part_list($component){
//Complex logic to get attached parts by $component
$component_parts = array('part1', 'part2');
return $component_parts;
}
private function load_component_parts(&$component, $component_parts) {
foreach ($component_parts as $component_part) {
$component[$component_part] = $this->{'load_' . $component_part}($component['id']);
}
}
private function load_part1($id) {
//Loading and prepare condition from one source
$part1 = new Part1($id);
// Complex algorithm
return $part1;
}
private function load_part2($id) {
//Loading and prepare condition from another source
$part2 = new Part2($id);
// Complex algorithm
return $part2;
}
}
class Part1 {
}
class Part2 {
}
我希望看到load_part1
和load_part2
的使用情况。
有没有办法通过使用phpDoc或其他方式来做到这一点?
此时PhpStorm注意到这个功能没有用,但真的用在load_component_parts
方法中。
答案 0 :(得分:0)
您可以使用 phpDoc 注释 <!--BoatDataService.cls-->
public with sharing class BoatDataService {
public static final String LENGTH_TYPE = 'Length';
public static final String PRICE_TYPE = 'Price';
public static final String TYPE_TYPE = 'Type';
@AuraEnabled(cacheable=true)
public static List<Boat__c> getBoats(String boatTypeId) {
// Without an explicit boatTypeId, the full list is desired
String query = 'SELECT '
+ 'Name, Description__c, Geolocation__Latitude__s, '
+ 'Geolocation__Longitude__s, Picture__c, Contact__r.Name, '
+ 'BoatType__c, BoatType__r.Name, Length__c, Price__c '
+ 'FROM Boat__c';
if (String.isNotBlank(boatTypeId)) {
query += ' WHERE BoatType__c = :boatTypeId';
}
query += ' WITH SECURITY_ENFORCED ';
return Database.query(query);
}
@AuraEnabled(cacheable=true)
public static List<Boat__c> getSimilarBoats(Id boatId, String similarBy) {
List<Boat__c> similarBoats = new List<Boat__c>();
List<Boat__c> parentBoat = [SELECT Id, Length__c, Price__c, BoatType__c, BoatType__r.Name
FROM Boat__c
WHERE Id = :boatId
WITH SECURITY_ENFORCED];
if (parentBoat.isEmpty()) {
return similarBoats;
}
if (similarBy == LENGTH_TYPE) {
similarBoats = [
SELECT Id, Contact__r.Name, Name, BoatType__c, BoatType__r.Name, Length__c, Picture__c, Price__c, Year_Built__c
FROM Boat__c
WHERE Id != :parentBoat.get(0).Id
AND (Length__c >= :parentBoat.get(0).Length__c / 1.2)
AND (Length__c <= :parentBoat.get(0).Length__c * 1.2)
WITH SECURITY_ENFORCED
ORDER BY Length__c, Price__c, Year_Built__c
];
} else if (similarBy == PRICE_TYPE) {
similarBoats = [
SELECT Id, Contact__r.Name, Name, BoatType__c, BoatType__r.Name, Length__c, Picture__c, Price__c, Year_Built__c
FROM Boat__c
WHERE Id != :parentBoat.get(0).Id
AND (Price__c >= :parentBoat.get(0).Price__c / 1.2)
AND (Price__c <= :parentBoat.get(0).Price__c * 1.2)
WITH SECURITY_ENFORCED
ORDER BY Price__c, Length__c, Year_Built__c
];
} else if (similarBy == TYPE_TYPE) {
similarBoats = [
SELECT Id, Contact__r.Name, Name, BoatType__c, BoatType__r.Name, Length__c, Picture__c, Price__c, Year_Built__c
FROM Boat__c
WHERE Id != :parentBoat.get(0).Id
AND (BoatType__c = :parentBoat.get(0).BoatType__c)
WITH SECURITY_ENFORCED
ORDER BY Price__c, Length__c, Year_Built__c
];
}
return similarBoats;
}
@AuraEnabled(cacheable=true)
public static List<BoatType__c> getBoatTypes() {
return [SELECT Name, Id FROM BoatType__c WITH SECURITY_ENFORCED ORDER BY Name];
}
@AuraEnabled(cacheable=false)
public static List<BoatReview__c> getAllReviews(Id boatId) {
return [
SELECT
Id,
Name,
Comment__c,
Rating__c,
LastModifiedDate,
CreatedDate,
CreatedBy.Name,
CreatedBy.SmallPhotoUrl,
CreatedBy.CompanyName
FROM
BoatReview__c
WHERE
Boat__c =:boatId
WITH SECURITY_ENFORCED
ORDER BY
CreatedDate DESC
];
}
@AuraEnabled(cacheable=true)
public static String getBoatsByLocation(Decimal latitude, Decimal longitude, String boatTypeId) {
// Without an explicit boatTypeId, the full list is desired
String query = 'SELECT Name, Geolocation__Latitude__s, Geolocation__Longitude__s FROM Boat__c ';
if (String.isNotBlank(boatTypeId)) {
query += 'WHERE BoatType__c = :boatTypeId ';
}
query += ' WITH SECURITY_ENFORCED ORDER BY DISTANCE(Geolocation__c, GEOLOCATION(:latitude, :longitude), \'mi\') LIMIT 10';
return JSON.serialize(Database.query(query));
}
}
。
例如:
@see
此注释至少会创建对此代码的引用,以便您在查看 $className = 'SomeClass';
$method = 'methodToCall';
$anArgument = 'bar';
/** @see SomeClass::someMethod() */
$foo = call_user_func([$className, $method], $anArgument);
时知道在丢弃“未使用”方法之前返回此处。