显示动态生成的可调用函数名称的用法

时间:2017-04-21 21:13:19

标签: phpstorm phpdoc

在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_part1load_part2的使用情况。

有没有办法通过使用phpDoc或其他方式来做到这一点?

此时PhpStorm注意到这个功能没有用,但真的用在load_component_parts方法中。

enter image description here

1 个答案:

答案 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); 时知道在丢弃“未使用”方法之前返回此处。