1#!/usr/bin/env php 2<?php 3 4/* 5 +----------------------------------------------------------------------+ 6 | Copyright (c) The PHP Group | 7 +----------------------------------------------------------------------+ 8 | This source file is subject to version 3.01 of the PHP license, | 9 | that is bundled with this package in the file LICENSE, and is | 10 | available through the world-wide-web at the following url: | 11 | https://www.php.net/license/3_01.txt | 12 | If you did not receive a copy of the PHP license and are unable to | 13 | obtain it through the world-wide-web, please send a note to | 14 | license@php.net so we can mail you a copy immediately. | 15 +----------------------------------------------------------------------+ 16 | Authors: Marcus Boerger <helly@php.net> | 17 +----------------------------------------------------------------------+ 18 */ 19 20/* This script lists extension-, class- and method names that contain any 21 underscores. It omits magic names (e.g. anything that starts with two 22 underscores but no more). 23 */ 24 25$cnt_modules = 0; 26$cnt_classes = 0; 27$cnt_methods = 0; 28$err = 0; 29 30$classes = array_merge(get_declared_classes(), get_declared_interfaces()); 31 32$extensions = array(); 33 34foreach(get_loaded_extensions() as $ext) { 35 $cnt_modules++; 36 if (strpos($ext, "_") !== false) { 37 $err++; 38 $extensions[$ext] = array(); 39 } 40} 41 42$cnt_classes = count($classes); 43 44foreach($classes as $c) { 45 if (strpos($c, "_") !== false) { 46 $err++; 47 $ref = new ReflectionClass($c); 48 if (!($ext = $ref->getExtensionName())) {; 49 $ext = $ref->isInternal() ? "<internal>" : "<user>"; 50 } 51 if (!array_key_exists($ext, $extensions)) { 52 $extensions[$ext] = array(); 53 } 54 $extensions[$ext][$c] = array(); 55 foreach(get_class_methods($c) as $method) { 56 $cnt_methods++; 57 if (strpos(substr($method, substr($method, 0, 2) != "__" ? 0 : 2), "_") !== false) { 58 $err++; 59 $extensions[$ext][$c][] = $method; 60 } 61 } 62 } 63 else 64 { 65 $cnt_methods += count(get_class_methods($c)); 66 } 67} 68 69$cnt = $cnt_modules + $cnt_classes + $cnt_methods; 70 71printf("\n"); 72printf("Modules: %5d\n", $cnt_modules); 73printf("Classes: %5d\n", $cnt_classes); 74printf("Methods: %5d\n", $cnt_methods); 75printf("\n"); 76printf("Names: %5d\n", $cnt); 77printf("Errors: %5d (%.1f%%)\n", $err, round($err * 100 / $cnt, 1)); 78printf("\n"); 79 80ksort($extensions); 81foreach($extensions as $ext => &$classes) { 82 echo "Extension: $ext\n"; 83 ksort($classes); 84 foreach($classes as $classname => &$methods) { 85 echo " Class: $classname\n"; 86 ksort($methods); 87 foreach($methods as $method) { 88 echo " Method: $method\n"; 89 } 90 } 91} 92 93printf("\n"); 94 95?> 96