Dado que ahora es la temporada navideña y todo el mundo está pidiendo deseos, me pregunto: ¿qué características de lenguaje desearía que PHP hubiera agregado? Estoy interesado en algunas sugerencias prácticas / deseos para el idioma. Por práctico quiero decir:
- Algo que se puede hacer prácticamente (no: "Deseo que PHP adivine lo que significa mi código y solucione los errores por mí" o "Deseo que cualquier código se ejecute en menos de 5 ms")
- Algo que no requiere cambiar PHP a otro idioma (no: "Me gustaría que soltaran signos de $ y usaran espacio en lugar de llaves" o "Me gustaría que PHP se compilara, se escribiera de forma estática y tuviera # en su nombre")
- Algo que no requeriría romper todo el código existente (no: "Cambiemos el nombre de 500 funciones y cambiemos el orden de los parámetros para ellas")
- Algo que lo hace cambiar el idioma o algún aspecto interesante de ella (no: "Me gustaría que hubiera extensión de soporte para el protocolo XYZ" o "Deseo el bug # 12345 fueron finalmente fijo")
- Algo que es más que una queja (no: "Desearía que PHP no apestara tanto")
Alguien tiene buenos deseos?
Edición de modificaciones: Stanislav Malyshev es un desarrollador principal de PHP.
Respuestas:
No me importaría los parámetros con nombre.
Desafortunadamente, los desarrolladores de PHP ya derribaron esa idea .
fuente
[]
operador de JavaScript ) sería una característica apreciada.Más desreferenciación:
Otros han mencionado parámetros con nombre y una sintaxis de matriz más corta. Tampoco me importaría una sintaxis de objeto más corta.
fuente
function something_that_returns_array() { return array( 'a', 'b', 'c', 'd', 'e' ); }
()->
sintaxis es que solo funciona cuando se devuelve un objeto, para empeorar las cosas, incluso se requiere que el objeto tenga una propiedad / método del nombre especificado, que, de manera óptima, hace lo que espera que haga. , mientras acepta los parámetros que le ha dado y reza para que no requiera más ... etc, etc.Después de trabajar con PHP durante aproximadamente 13 años, y en gran medida con JS durante aproximadamente 4, hay un par de cosas que creo que PHP haría bien en tomar prestado de JS:
1) notación abreviada para matrices y objetos. Creo que esto puede haber sido discutido y derribado en Internals (así que escuché, no me gusta ver cómo se hace la salchicha), pero realmente, realmente encuentro que la notación literal para matrices y objetos en JS es muy grande La productividad gana.
Por ejemplo:
Es (en mi humilde opinión) mucho más fácil de escribir y más limpio que
He oído que surgió cierta preocupación sobre la posible confusión, pero realmente, ¿es esto más confuso que, digamos, la notación heredoc? Al menos, creo que hacer un objeto stdClass en PHP es lo suficientemente detallado como para desalentar la práctica.
2) Ser capaz de redefinir funciones y métodos previamente definidos sería realmente útil. En particular, simplificaría las situaciones al extender una clase y crear instancias de la nueva clase es demasiado complejo o poco práctico. Sin embargo, creo que deberíamos evitar la redefinición de funciones y métodos básicos / no de espacio de usuario.
Además de esos dos, creo que PHP debe admitir de forma transparente unicode . Esto se está convirtiendo en un problema cada vez mayor para los desarrolladores, y las soluciones que se ofrecen actualmente en PHP son confusas y con frecuencia no funcionan. Hacer que todas las funciones de cadena estándar sean compatibles con Unicode de forma inmediata sería una gran victoria para los programadores de PHP.
¡Gracias por preguntar!
fuente
Cosas que me gustaría, como un antiguo apologista de PHP:
some_array_method($argity, array('key' => $value));
. Por desgracia, creo que esta propuesta ya fue eviscerada en la lista de correo de PHP.finally
apoyoAuthorizeAttribute
que indicaría que un controlador o método de acción requiere que el usuario esté autorizado. El marco en sí mismo sería responsable de buscar los atributos y actuar en consecuencia en consecuencia. Creo que PHPUnit ya usa una especie de atributo al colocarlos en los comentarios de docblock, que se pueden leer usando la reflexión, pero poner la funcionalidad real en los comentarios de docblock es ciertamente un truco.function($x){ return $x*2;}
, tal vez podría escribir$x => return $x*2
, o algo así. De nuevo, esto es algo que hace que sea un lastre usar esta función. Por ejemplo$results = array_filter(array(1,2,3), function($a) { return $a % 2; }):
vs$results = array_filter(array(1,2,3), $a => return $a % 2 );
El ex simplemente tiene mucho más plomería que es básicamente irrelevante para el trabajo real que está tratando de lograr.Decimal
Sería bueno tener una función integrada (matemática de punto fijo) que admitiera operaciones matemáticas a través de los operadores normales, ya que no tenemos sobrecarga de operadores.fuente
Haga PHP verdaderamente orientado a objetos. La
slap on another global function
evolución de PHP necesita terminar.Esto me es difícil de leer. Tengo que hacer mi propio stack mental y compilarlo yo mismo. Básicamente debería leer al revés.
$dog->wakeup()->bark();
es fácil de leer en comparación conbark(wakeup($dog))
Ya ha dado el paso para habilitar el soporte de objetos / métodos. Úselo en las funciones centrales de PHP.
Cambiar esta funcionalidad a métodos les permitiría cambiarles el nombre usando algunos de manera consistente. ¿Rompería la compatibilidad con versiones anteriores si las cadenas y las matrices tuvieran sus propios métodos?
fuente
dog_wake_up($dog); bark_dog($dog);
Un motor de consulta integrado en el lenguaje sería genial. Algo así como lo que está disponible en .NET llamado LINQ. Ayudaría a clasificar a través de matrices masivas de datos y estandarizar el acceso a la base de datos, para que tengan éxito menos ataques de inyección SQL.
fuente
Oh. Sugerencias de tipo para primitivas. Eso estaría bien.
fuente
Realmente deseo un mejor soporte Unicode fuera de la caja. La mayoría de los lenguajes se mueven en esa dirección, pero PHP todavía tiene comandos extraños llenos por todas partes.
http://blog.ginkel.com/2010/03/php-unicode-support-or-the-lack-thereof/
fuente
Haga que las cadenas sean objeto, con métodos incorporados para reemplazar los que no son objeto y son parametrizados de manera inconsistente. p.ej
etc.
Editar: una cosa más: estos métodos siempre deben esperar y emitir UTF-8, excepto aquellos específicamente diseñados para tratar codificaciones. Si la entrada no es válida UTF-8, se debe lanzar una excepción, incluso si la salida de la función no se vería afectada por la codificación.
fuente
subject->verb(object)
, hace que el orden de los parámetros sea más fácil de recordar.is_object($string)
volvería? Esto rompería la compatibilidad hacia atrás a lo grande, o daría como resultado la introducción de objetos realmente poco intuitivos, pero no del todo.1) Me encantaría que los objetos recién instanciados devuelvan "$ this" para poder encadenar el método $ user = new User ('john') -> setLastName ('Doe') -> save ();
2) Si alguna vez ha usado ruby, y el nodo más reciente, tienen un gran shell interactivo (IRB). Me encantaría que PHP tuviera uno que fuera realmente útil.
3) Rasgos / Mixins, pero escuché que están en camino.
4) Quiero secundar la matriz corta $ myArray = ['my', 'array'];
5) Nombramiento / orden consistente (es decir, pajar de agujas)
fuente
create()
método que no haga nada especial solo para trabajar alrededor del # 1!1) por favor deshacerse de incluye (). Las referencias a otros archivos deben ser referencias y no colocar el contenido de un archivo de código fuente en otro. Demasiados programadores PHP usan include () como un tipo de llamada de función en lugar de un medio para hacer referencia a una biblioteca. Esto conduce a todo tipo de ambigüedad en estado variable y código inestable. Reemplace esto con un comando 'use' similar a Perl.
2) proporcione un fuera de la caja método para compilar una aplicación PHP en un solo archivo de código de bytes distribuibles o ejecutable. Esto mejorará en gran medida el atractivo de PHP como lenguaje de desarrollo comercial. Este debería ser un componente básico del lenguaje. No se preocupe por los archivos html utilizados para la GUI de una aplicación porque ...
3) elimine la capacidad de incrustar etiquetas PHP en HTML. O al menos proporcione un modo 'sin incrustar'. Esto es un desastre absoluto y fomenta el mal diseño al mezclar la lógica de la aplicación y la presentación. Los desarrolladores deberían usar plantillas para mostrar y no juntar archivos PHP y esperar lo mejor.
Firmado
Gran maestro B
PD: no escuches lo que otros dicen aquí, he sido agradable todo el año
fuente
Una directiva ini para
E_ERROR
constantes indefinidas, en lugar de asumir que es una cadena conE_NOTICE
.fuente
E_ERROR
oE_PARSE
.¡Normalice el espacio de nombres global con una convención de nomenclatura bien pensada que tenga sentido para los recién llegados!
Para citar a nuestro amado Jeff Atwood: ¡ PHP apesta pero no importa !
fuente
Las cadenas deben ser objetos
fuente
1) Sintaxis de matriz / objeto más corta, a la JavaScript (como se mencionó anteriormente)
2) Permitir
const
variables para permitir el resultado de un cálculo como lodefine()
hace.3) Encadenamiento directamente desde el constructor:
new User()->name('Ryan');
4) Desreferenciación de matriz:
something_that_returns_array()[4];
5) Soporte SPL ampliado. SPL hace un trabajo decente al reinventar las funciones de cadena y matriz (entre otras cosas) como objetos. Expandir SPL podría resolver muchas quejas sobre que el lenguaje es tan extraño.
6) El uso
ArrayObject()
debe ser tan transparente como el usoarray()
. Deberías poder hacer cosasarray_filter($array_object_instance)
sin hacerarray_filter($array_object_instance->getArrayCopy())
. Incluso mejor, por supuesto, lo sería$array_object_instance->filter()
.7) Unicode completo sería bueno.
8) Deja de hacer extrañas conversiones automáticas de tipos. Por ejemplo, no debería poder crear
echo
un objeto SimpleXMLElement sin primero escribirlo explícitamente como una cadena. O al menos, arroje algo cuando suceda (por ejemplo, en modo estricto o en cualquier modoerror_reporting(-1)
).9) Soporte para múltiples hilos, o algún tipo de devoluciones de llamadas igualadas / asincrónicas. Esto es más importante cuando se intenta cargar archivos grandes a través de cURL. En lugar de hilos viejos, algo como el Grand Central Dispatch de Apple sería bueno. O incluso algo parecido a JavaScript donde puede realizar solicitudes asíncronas y definir devoluciones de llamada.
10) La asignación de nombres / orden consistentes (es decir, pajar de agujas) sería bueno, pero creo que esto podría resolverse mejor con SPL.
11) Un shell PHP interactivo oficialmente compatible, como IRB. Facebook tiene una llamada
phpsh
que fue escrita en Python, pero carece del esmalte que me gustaría ver.12) Para la API Reflection, agregue soporte para (a) comentarios de docblock en constantes (global y clase), y (b) soporte para analizar comentarios similares a PHPDoc en una estructura de datos sensible. Hay un paquete PECL llamado "docblock" que intenta hacer esto, pero no parece que el autor haya llegado muy lejos.
EDITAR: 13) También me encantaría ver la capacidad de usar
!
y?
en los nombres de las funciones, como Ruby can.fuente
1) Comprensión de matriz al estilo de la comprensión de la lista de Python:
2) sintaxis de matriz corta
3) Hacer vacío () no considerar la cadena '0' como verdadera
fuente
empty()
es el opuesto lógico deif ($x)
, por lo que tiene sentido queempty('0')
sea cierto, porqueif ('0')
es falso. La única diferencia esempty()
que no arroja un aviso si la variable no está establecida.Me gustaría ver un método legítimo para crear / definir matrices CONSTANTES. Hay algunas formas difíciles de simular este tipo de funcionalidad, pero sería bueno si fuera solo una función directa de PHP. Sería bueno si pudiera crear una matriz de una manera similar a la declaración "final" de Java.
Creé un sistema de inicio de sesión que es muy rápido de configurar. Todo lo que tiene que hacer es cambiar el contenido de una matriz en un archivo de texto para especificar los campos que desea para la información del usuario. Usando una serie de bucles for, maneja todo, desde la generación de formularios y la sensibilización de entrada, hasta las llamadas a la base de datos, pero todo depende de esta matriz original.
El archivo con la matriz está bloqueado con permisos, pero una vez que la matriz se mueve en el éter es mutable. Aunque siento que el sistema es bastante seguro, no me gusta dejar nada al azar. Un método para finalizar matrices sería bueno para una situación como esta.
¡¡Idea Nueva!!
Ohhh, pensé en algo más que realmente me gustaría en php. Me gustaría algún tipo de sistema para controlar las operaciones de archivos php y las operaciones de directorio similares a la forma en que funciona .htaccess.
El archivo .phpaccess debería desencadenar algún tipo de política de mismo dominio / mismo origen.
Por ejemplo, si estuviera alojando muchos sitios con hosts virtuales, podría tener un archivo .phpaccess en un directorio que le indicaría a php que verifique el origen de cualquier script que se esté ejecutando y que esté tratando de operar en mi directorio protegido. Si el script no vino de ese directorio o sus subdirectorios, las operaciones de archivos / operaciones de socket serán denegadas.
Creo que un sistema como este haría que el alojamiento virtual sea un entorno mucho más seguro. Si pudiera colocar uno de estos en la parte superior de cada host virtual, disminuiría la posibilidad de que alguien encuentre una manera de colarse desde un host virtual vecino.
También si sería bueno tener un método para asegurarlo al revés de esta manera. es decir, restringir el alcance de los scripts en un solo directorio a ese directorio.
Es el yin y el yang ya sabes!
fuente
final
. Para aclarar:final
significa que el valor de una variable se puede establecer en tiempo de ejecución (a diferencia de las constantes, que deben ser expresiones constantes), pero solo se puede establecer una vez. Ver también C # 'sreadonly
.Mis dos mayores deseos como programador PHP incondicional:
fuente
Sintaxis del lenguaje : hay algunas buenas pistas en pihipi y phpreboot de lo que les interesa a los desarrolladores (aunque phpreboot va demasiado lejos y se convierte en JS).
Metodología de desarrollo : mejoraría enormemente la vida útil de PHP.net si tales encuestas se tuvieran realmente en cuenta. No tome más decisiones de sintaxis de sesión de IRC tarde o noche.
Características individuales : Algunas se han mencionado antes, pero felizmente quemaré algo de karma para ser más contundente aquí:
str::toupper()
)\
sintaxis del espacio de nombres de mierda , arregla el analizador y adopta::
como alternativa. Ya sabes, como un lenguaje real.Aunque, si esto no es obvio, me encantaría financiar a alguien más para hacer lo último, y eliminaría php.net como implementación principal.
:P
Oh, acabo de notar, es wiki de la comunidad. Por lo tanto, existe la posibilidad de que en realidad no estés aquí por el karma, sino de un interés genuino. Si es así, examine el <b> problema </b> que daña gravemente el lenguaje (directoritis).
fuente
::
habría sido más natural para cualquier lenguaje de cierre de sintaxis C / C ++. Y `\` no solo es anormal entre todos los lenguajes de programación, sino que tiene connotaciones no probadas. Algunas discusiones anteriores: stackoverflow.com/questions/238550/… o developers.slashdot.org/article.pl?sid=08/10/26/1610259 y reddit.com/r/programming/comments/79cut/… - Pero en En particular, decidir eso sin comentarios y señalar a la comunidad de desarrolladores que lo asimilen no fue un movimiento muy bienvenido.Me encantaría ver la unificación de Errores y Excepciones en un solo concepto (Excepciones). Es genial poder detectar excepciones y escribirlas en un registro, para encontrar y corregir errores de esa manera. Pero si hay algo fundamentalmente incorrecto (léase: Error de PHP) en una ruta de código que rara vez se alcanza, no hay una buena manera de canalizar esa información en la misma base de datos de problemas.
Por favor, Santa, introduce un interruptor en php.ini que convertiría todos los errores en excepciones, idealmente, excepciones que puedo detectar en mi código.
fuente
PHP me queda bien, ya que es para crear sitios web pequeños y medianos; Debo ser poco imaginativo, lo único que podría pensar como respuesta a esta pregunta sería algo que lo haga escalar mejor para sitios de alto tráfico.
Estoy pensando en términos de generar procesos a otros núcleos, por ejemplo, actualizar una base de datos en un proceso mientras se crea la página de salida en otro proceso. Una búsqueda rápida en Google indica que esto se puede simular, pero actualmente no se admite directamente en PHP.
fuente
Realmente extrañé que los tipos escalares no se traten como objetos, y los objetos reales no pueden actuar como cualquier otro tipo u objeto (a excepción de la cadena debido a __toString ()).
fuente
fuente
Limpie las "Notas contribuidas por el usuario" en http://php.net . A veces son un verdadero desastre, aunque en general son de gran valor.
fuente
Hay algunas funciones de matriz bastante decentes en PHP, que proporcionan capacidad de procesamiento de listas, con devoluciones de llamada y
create_function()
proporcionan un cálculo lambda básico.El principal problema con esto es que es demasiado detallado en PHP, un sistema abreviado sería excelente, particularmente en lo que respecta a los comandos map / reduce.
Más importante aún, las funciones de la lista no están completamente completas:
foldr
función,array_reduce()
proporcionafoldl
array_map()
debe pasar la clave en el segundo argumento, como loarray_walk()
hacearray_map_keys()
podría ser útil para la modificación de claverange()
,array_fill()
yarray_fill_keys()
sólo manejan tantos casos, yarray_filter()
es independienteNo pretendo hacer PHP en Haskell, pero PHP a menudo se usa para la manipulación de la estructura de datos de tipo de lista y sería útil tener un conjunto completo de herramientas a este respecto.
fuente
Sobrecarga del operador:
fuente
Agregue excepciones en lugar de producir E_WARNING ... Es muy molesto que no pueda usar algo como:
Por supuesto, actualmente no es muy práctico, pero es muy molesto recibir:
ADVERTENCIA
ADVERTENCIA
ADVERTENCIA
y no puedo controlar el flujo de código sin escribir mi propio error_handler y detectar el error que se ha producido (permiso, nombre de archivo incorrecto o cualquier otra cosa; no me importan otras fuentes de errores aquí) para lanzar la excepción correcta .
Espero no tener que explicar por qué es importante.
PHP se volvió orientado a objetos hace mucho tiempo y nosotros, los programadores que usamos PHP, estamos esperando las funciones OO, no introduciendo "goto" ... Cuando descubrí que realmente sucedió, pensé que era un día de los Inocentes.
fuente
Consolide el modelo de objetos: haga que todos los objetos extiendan la clase de objeto base. La clase Object (entre otras cosas) implementaría todos los métodos mágicos (¡para que ya no sean mágicos!)
Mover extensiones a sus propios espacios de nombres: despeje el espacio de nombres global
$conn = new \MySQLi\Connection();
¡Deshabilita la
spl_autoload()
función! En serio, esta es posiblemente una de las mejores características de PHP y también la más inútil al mismo tiempo.spl_autoload
es el cargador automático predeterminado, que admite espacios de nombres y múltiples extensiones de archivos, pero por alguna razón desconocida requiere que los nombres de los archivos estén en minúsculas. Hay un informe de error lleno para esto , pero el personal respondió que no lo solucionarán debido a la compatibilidad con versiones anteriores. Correcto ... ¡no es que cada framework se envíe con su propio cargador automático, ya que el predeterminado está dañado!fuente
Soporte de archivos grandes. ¿Bastante por favor?
Ver http://bugs.php.net/bug.php?id=27792 (aunque puede haber más áreas / funciones que también necesitan atención).
fuente
Lleve el soporte Taint a la última versión e inclúyalo en compilaciones estándar, preferiblemente activado en la configuración predeterminada http://wiki.php.net/rfc/taint
Esto evitaría los ataques de inyección XSS y SQL al hacer que las personas codifiquen correctamente.
fuente