Sé que esto suena como una pregunta puntual, pero déjame explicarte de dónde vengo.
Fuera de la universidad conseguí un trabajo en una tienda PHP. Trabajé allí durante un año y medio y pensé que había aprendido todo lo que había que aprender sobre programación.
Luego conseguí un trabajo como taller de desarrollo interno de un solo hombre en una corporación considerable donde todo el trabajo estaba en C #. En mi compromiso con el puesto, comencé a leer un montón de blogs y libros y rápidamente me di cuenta de lo equivocado que estaba al pensar que lo sabía todo. Aprendí sobre las pruebas unitarias, la inyección de dependencia y los patrones decoradores, el principio de diseño del acoplamiento flojo, la composición sobre el debate de la herencia, y así sucesivamente. Todavía lo estoy absorbiendo todo. No hace falta decir que mi estilo de programación ha cambiado completamente en el último año.
Ahora me encuentro recogiendo un proyecto de PHP haciendo algo de codificación para el inicio de un amigo y me siento completamente limitado en comparación con la programación en C #. Realmente me molesta que todas las variables en un ámbito de clase tengan que ser mencionadas agregando '$ this->'. Me molesta que ninguno de los IDE que he probado tengan muy buena inteligencia y que mis métodos de prueba de unidad SimpleTest tengan que comenzar con la palabra 'prueba'. Me vuelve loco que la escritura dinámica me impida especificar implícitamente qué tipo de parámetro espera un método, y que usted tiene que escribir una declaración de cambio para realizar sobrecargas de métodos. No puedo soportar que no puedas tener espacios de nombres anidados y que tengas que usar el operador :: para llamar al constructor de la clase base.
Ahora no tengo intención de iniciar un debate PHP vs C #, más bien lo que quiero decir es que estoy seguro de que hay algunas características de PHP que no conozco o que aún no uso correctamente. Estoy ambientado en mi universo C # y tengo problemas para ver fuera del recipiente de vidrio.
Entonces, pregunto, ¿cuáles son sus características favoritas de PHP? ¿Qué cosas puedes hacer en él que no puedes o son más difíciles en los idiomas .Net?
fuente
Respuestas:
Documentación . La documentación obtiene mi voto. No he encontrado una documentación en línea más exhaustiva para un lenguaje de programación; todo lo demás lo tengo que reunir de varios sitios web y páginas de manual.
fuente
Las matrices . A juzgar por las respuestas a esta pregunta, no creo que las personas aprecien completamente cuán fáciles y útiles son las matrices en PHP. Las matrices PHP actúan como listas, mapas, pilas y estructuras de datos genéricos, todo al mismo tiempo. Las matrices se implementan en el núcleo del idioma y se utilizan en todas partes, lo que da como resultado una buena ubicación de la caché de la CPU. Perl y Python usan construcciones de lenguaje separadas para listas y mapas, lo que resulta en más copias y transformaciones potencialmente confusas.
fuente
[[1, 2], [3, 4]]
, comparar esto con la versión de PHP:array(array(1, 2), array(3, 4))
.Los controladores de transmisión le permiten ampliar el "FileSystem" con una lógica que, hasta donde yo sé, es bastante difícil de hacer en la mayoría de los otros idiomas.
Por ejemplo, con el controlador MS-Excel Stream puede crear un archivo MS Excel de la siguiente manera:
fuente
Los métodos mágicos son métodos fallidos que se llaman cada vez que invocas un método que no existe o asignas o lees una propiedad que no existe, entre otras cosas.
Un desarrollador de C ++ aquí podría notar que PHP permite sobrecargar algunos operadores, por ejemplo,
()
o(string)
. En realidad, PHP permite sobrecargar aún más, por ejemplo, el[]
operador ( ArrayAccess ), laforeach
construcción del lenguaje ( Iterator e IteratorAggregate ) y lacount
función ( Contable ).fuente
__call()
es genial en marcos con map domain.com/controller/method/La clase estándar es un contenedor ordenado. Solo me enteré recientemente.
En lugar de usar una matriz para contener varios atributos
Puedes usar una clase estándar
Esto es particularmente útil cuando se accede a estas variables en una cadena
fuente
Los archivos de inclusión pueden tener un valor de retorno que puede asignar a una variable.
fuente
Puede aprovechar el hecho de que el
or
operador tiene menos prioridad que=
hacer esto:Si el valor de la primera asignación se evalúa como
true
, la segunda asignación se ignora. Otro ejemplo:fuente
or
se ejecutará si el código anterioror
da como resultado el valor numérico0
. Por lo tanto, semánticamente puede ser menos probable con algo así$_GET['page']
, pero obviamente la circunstancia puede surgir y es bueno tener cuidado.or
operador es una versión del||
operador con un precedente inferior . Además, +1 porque esto es altamente expresivo y a menudo olvido que es posible. Debe usarse con más frecuencia, y es absolutamente claro en lo que hace. Sin embargo, no sé cómo codifican los "hombres reales", así que no puedo comentar sobre eso.__autoload()
(clase) archivos ayudados porset_include_path()
.En PHP5 ahora no es necesario especificar largas listas de declaraciones "include_once" cuando se hace una OOP decente.
Simplemente defina un pequeño conjunto de directorios en el que los archivos de la biblioteca de clases estén estructurados de manera sensata y configure la ruta de inclusión automática:
Ahora la
__autoload()
rutina:Ahora PHP incluirá automáticamente los archivos necesarios a pedido, conservando el tiempo de análisis y la memoria.
fuente
Facilidad . La mejor característica es lo fácil que es para los nuevos desarrolladores sentarse y escribir scripts "de trabajo" y comprender el código.
La peor característica es lo fácil que es para los nuevos desarrolladores sentarse y escribir scripts "funcionales" y pensar que entienden el código.
La apertura de la comunidad que rodea a PHP y la gran cantidad de proyectos de PHP disponibles como código abierto es mucho menos intimidante para alguien que ingresa al mundo del desarrollo y, como usted, puede ser un trampolín hacia lenguajes más maduros.
No debatiré las cuestiones técnicas que muchos tienen antes que yo, pero si miras PHP como una comunidad en lugar de un lenguaje web, una comunidad que claramente te abrazó cuando comenzaste a desarrollar, los beneficios realmente hablan por sí mismos.
fuente
¡Variables variables y funciones sin duda!
El mismo concepto se aplica a los parámetros del objeto ($ some_object -> $ some_variable);
Muy, muy agradable. La codificación de Make con bucles y patrones es muy fácil, y es más rápida y está más controlada que Eval (¡Thanx @Ross & @Joshi Spawnbrood!).
fuente
Puede usar funciones con un número indefinido de argumentos usando
func_get_args()
.fuente
Me encantan los archivos remotos . Para el desarrollo web, este tipo de característica es excepcionalmente útil.
¿Necesita trabajar con los contenidos de una página web? Un simple
y tiene un identificador de archivo listo para usar, como cualquier otro archivo normal.
¿O qué tal leer un archivo remoto o una página web directamente en una cadena?
La utilidad de este método en particular es difícil de exagerar.
¿Quieres analizar una imagen remota? ¿Qué tal hacerlo a través de FTP?
Casi cualquier función PHP que funcione con archivos puede funcionar con un archivo remoto. Incluso puede
include()
orequire()
archivos de código de forma remota de esta manera.fuente
strtr ()
Es extremadamente rápido, tanto que te sorprendería. Internamente, probablemente utiliza alguna estructura de tipo b-tree loco para organizar sus coincidencias por sus prefijos comunes. Lo uso con más de 200 cadenas de búsqueda y reemplazo y todavía pasa por 1 MB en menos de 100 ms. Para todas las cadenas, excepto trivialmente pequeñas, strtr () es incluso significativamente más rápido que strtolower () para hacer exactamente lo mismo, incluso teniendo en cuenta el conjunto de caracteres. Probablemente podría escribir un analizador completo utilizando llamadas strtr sucesivas y sería más rápido que la coincidencia de expresión regular habitual, averiguar el tipo de token, generar esto o aquello, el siguiente tipo de expresión regular.
Estaba escribiendo un normalizador de texto para dividir el texto en palabras, minúsculas, eliminar signos de puntuación, etc. y strtr era mi navaja suiza, superaba a los pantalones con expresiones regulares o incluso str_replace ().
fuente
Una característica no tan conocida de PHP es
extract()
, una función que desempaqueta una matriz asociativa en el espacio de nombres local. Esto probablemente existe para la aborto autoglobal, pero es muy útil para crear plantillas:Ahora puede usar
render_template('index.html', array('foo' => 'bar'))
y solo$foo
con el valor"bar"
aparece en la plantilla.fuente
Range () no está oculto per se, pero todavía veo mucha gente iterando con:
cuando podrían estar usando:
Y puedes hacer cosas simples como
fuente
Read Loop
.El espacio web habilitado para PHP suele ser menos costoso que algo con (asp) .net. Usted puede llamar a eso una característica ;-)
fuente
La
static
palabra clave es útil fuera de un punto de vista de OOP. Puede implementar rápida y fácilmente la 'memorización' o el almacenamiento en caché de funciones con algo tan simple como:La
static
palabra clave crea una variable que persiste solo dentro del alcance de esa función después de la ejecución. Esta técnica es ideal para funciones que afectan a la base de datosget_all_books_by_id(...)
oget_all_categories(...)
que llamaría más de una vez durante una carga de página.Advertencia: asegúrese de encontrar la mejor manera de hacer una clave para su hash, en casi todas las circunstancias lo
md5(...)
anterior NO es una buena decisión (problemas de velocidad y longitud de salida), lo usé con fines ilustrativos.sprintf('%u', crc32(...))
ospl_object_hash(...)
puede ser mucho mejor dependiendo del contexto.fuente
Una buena característica de PHP es la CLI . No está tan "promocionado" en la documentación, pero si necesita scripts de rutina / aplicaciones de consola, ¡usar cron + php cli es realmente rápido de desarrollar!
fuente
wget http://example.com...
Luego truco "e imprimir"
Se hará eco de Blah si $ flag es verdadero. NO FUNCIONA CON ECHO.
Esto es muy útil en la plantilla y reemplazar el? : que no son realmente fáciles de leer.
fuente
Puede usar el carácter menos en nombres de variables como este:
¿Por qué usarlo? No tengo idea: ¿tal vez para un modelo CSS? O algún JSON extraño que necesites generar. Es una característica extraña :)
fuente
$item->DataContent->body->{'body.content'}
.La sintaxis de HEREDOC es mi característica oculta favorita. Siempre es difícil de encontrar, ya que no puedes buscar en Google <<< pero evita que tengas que escapar de grandes fragmentos de HTML y aún te permite colocar variables en la secuencia.
fuente
Probablemente no muchos sepan que es posible especificar "variables" constantes como valores predeterminados para los parámetros de función:
Las cadenas se pueden usar como si fueran matrices :
fuente
Lo más útil del código PHP es que si no entiendo una función, veo que puedo buscarla usando un navegador y escribiendo:
El mes pasado vi la función "rango" en algún código. Es una de las cientos de funciones que nunca pude usar, pero resultó ser realmente útil:
Esa url es un alias para http://us2.php.net/manual/en/function.range.php . Esa idea simple, de funciones de mapeo y palabras clave para URL , es increíble.
Deseo que otros idiomas, marcos, bases de datos, sistemas operativos tengan un mecanismo tan simple para buscar documentación.
fuente
range()
puede ser útil paraforeach( range(1, 10) as $i) { };
PHP function
en la barra de direcciones, hará una búsqueda en Google 'Me siento afortunado' y casi siempre termina en la página de documentación de php correcta.Comentarios rápidos de bloque
Estos comentarios le permiten alternar si un bloque de código se comenta con un carácter.
fuente
// ...
comentarios de línea y/* ... */
comentarios de bloque./** /
antes y/**/
después. Puede alternar el bloque eliminando y agregando el espacio en el primero. Esto tiene una ventaja adicional de trabajar con CSS (y otros idiomas que no admiten// ...
comentarios).Mi lista ... la mayoría de ellos se encuentran más en las "características ocultas" que en las "características favoritas" (¡espero!), Y no todas son útiles, pero ... sí.
También puede anidar operadores ternarios, a veces resulta útil.
Bien, me detendré por ahora :-)
Hmm, ha pasado un tiempo ...
Entonces, acabo de descubrir que puede pasar cualquier cadena como nombre de método SI la encierra con llaves. No puede definir ninguna cadena como método, por desgracia, pero puede atraparlas con __call () y procesarlas aún más según sea necesario. Hmmm ...
Encontré esta pequeña joya en los comentarios de Reddit:
No puede llamar a las funciones dentro de {} directamente de esta manera, ¡pero puede usar variables-holding-the-function-name y llamarlas! (* y * también puedes usar variables variables en él)
fuente
${''} = 456;
jajaja .... todo el abuso.Manipulación de matrices.
Toneladas de herramientas para trabajar y manipular matrices. Puede que no sea exclusivo de PHP, pero nunca he trabajado con un lenguaje que lo haya hecho tan fácil.
fuente
Soy un poco como tú, he codificado PHP por más de 8 años. Tuve que tomar un curso .NET / C # hace aproximadamente un año y realmente disfruté el lenguaje C # (odiaba ASP.NET) pero me convirtió en un mejor desarrollador de PHP.
PHP como lenguaje es bastante pobre, pero soy extremadamente rápido con él y la pila de LAMP es increíble. El producto final supera con creces la suma de las partes.
Dicho esto, en respuesta a tu pregunta:
http://uk.php.net/SPL
Me encanta el SPL , la clase de colección en C # fue algo que me gustó tan pronto como comencé con él. Ahora puedo tener mi pastel y comerlo.
Andrés
fuente
Estoy un poco sorprendido de que nadie lo haya mencionado todavía, pero uno de mis trucos favoritos con las matrices es usar el operador plus. Es un poco como
array_merge()
pero un poco más simple. He descubierto que generalmente es lo que quiero. En efecto, toma todas las entradas en el RHS y las hace aparecer en una copia del LHS, sobrescribiendo según sea necesario (es decir, no es conmutativo). Muy útil para comenzar con una matriz "predeterminada" y agregar algunos valores reales en un solo golpe, mientras se dejan los valores predeterminados para los valores no proporcionados.Código de muestra solicitado:
fuente
$defaults
debería ser$control_defaults
... + array( ...
no es suficiente para señalar esto? :-)Aquí hay uno, me gusta cómo establecer valores predeterminados en los parámetros de función que no se proporcionan es mucho más fácil:
fuente
Rápido y sucio es el valor predeterminado.
El lenguaje está lleno de atajos útiles. Esto hace que PHP sea el candidato perfecto para proyectos (pequeños) que tienen poco tiempo de comercialización. No es que el código PHP limpio sea imposible, solo requiere un esfuerzo extra y experiencia.
Pero me encanta PHP porque me permite expresar lo que quiero sin escribir un ensayo.
PHP:
JAVA:
Y sí, eso incluye no escribir Int .
fuente
//
está integrado en el lenguaje.