No Branch/Tag Specified
master
4.2
4.1
dev/issue_5560_dispositions_prive
issue_5095
4.0
3.2
dev/issue_4626_menu_squelettes
fix_issue_5454
issue_5427_bis
coquille_doc
issue_5344
dev/hasard_fixe
issue_4836
debug_ecrire_fichier
fix_modifier_login
dev/instituer_ergo
dev_infos_image
fix/valider_url_distante
issue_4946
3.1
boutons-danger
issue_4717
dev-sortable
issue_4705
dev/autoloader
issue_4678
issue_4101
3.0
2.1
2.0
1.9.2
1.9.1
1.8
v4.2.2
v4.1.9
v4.0.11
v3.2.19
v4.2.1
v4.1.8
v4.0.10
v3.2.18
v4.2.0
v4.2.0-alpha2
v4.2.0-alpha
v4.1.7
v4.1.6
v4.0.9
v3.2.17
v4.1.5
v4.1.4
v3.2.16
v4.0.8
v4.1.3
v3.2.15
v4.0.7
v4.1.2
v4.0.6
v4.1.1
v4.1.0
v4.1.0-rc
v4.0.5
v3.2.14
v4.1.0-beta
v4.1.0-alpha
v3.2.13
v4.0.4
v4.0.3
v4.0.2
v3.2.12
v4.0.1
v4.0.0
v4.0.0-beta
v4.0.0-alpha
v3.2.11
v3.2.10
v3.1.15
v3.2.9
v3.1.14
v3.1.13
v3.2.8
v3.2.7
v3.2.6
v3.2.5
v3.2.4
v3.2.3
v3.2.2
v3.2.1
v3.2.0-beta.3
v3.2.0-beta.2
v3.2.0-beta
v3.2.0-alpha.1
v3.2.0
v3.2-alpha.1
v3.1.9
v3.1.8
v3.1.7
v3.1.6
v3.1.5
v3.1.4
v3.1.3
v3.1.2
v3.1.12
v3.1.11
v3.1.10
v3.1.1
v3.1.0-rc.3
v3.1.0-rc.2
v3.1.0-rc
v3.1.0-beta
v3.1.0-alpha
v3.1.0
v3.0.9
v3.0.8
v3.0.7
v3.0.6
v3.0.5
v3.0.4
v3.0.3
v3.0.28
v3.0.27
v3.0.26
v3.0.25
v3.0.24
v3.0.23
v3.0.22
v3.0.21
v3.0.20
v3.0.2
v3.0.19
v3.0.18
v3.0.17
v3.0.16
v3.0.15
v3.0.14
v3.0.13
v3.0.12
v3.0.11
v3.0.10
v3.0.1
v3.0.0-rc
v3.0.0-beta.2
v3.0.0-beta
v3.0.0-alpha.1
v3.0.0
v2.1.9
v2.1.8
v2.1.7
v2.1.6
v2.1.5
v2.1.4
v2.1.30
v2.1.3
v2.1.29
v2.1.28
v2.1.27
v2.1.26
v2.1.25
v2.1.24
v2.1.23
v2.1.22
v2.1.21
v2.1.20
v2.1.2
v2.1.19
v2.1.18
v2.1.17
v2.1.16
v2.1.15
v2.1.14
v2.1.13
v2.1.12
v2.1.11
v2.1.10
v2.1.1
v2.1.0
v2.0.9
v2.0.8
v2.0.7
v2.0.6
v2.0.5
v2.0.3
v2.0.26
v2.0.25
v2.0.24
v2.0.23
v2.0.22
v2.0.21
v2.0.20
v2.0.2
v2.0.19
v2.0.18
v2.0.17
v2.0.16
v2.0.15
v2.0.14
v2.0.13
v2.0.12
v2.0.11
v2.0.10
v2.0.1
v2.0.0
v1.9.2+p
v1.9.2+o
v1.9.2+n
v1.9.2+m
v1.9.2+k
v1.9.2+j
v1.9.2+i
v1.9.2+h
v1.9.2+g
v1.9.2+f
v1.9.1+i
v1.8.3+b
Labels
Clear labels
Amélioration, nouvelle fonctionnalité
Ca ne fonctionne pas
Ce ticket est un doublon
Ticket invalide
Ignoré, c'est comme Ca...
Apply labels
accessibilité
amélioration
Amélioration, nouvelle fonctionnalité
APIs
authentification
base de données
bug
Ca ne fonctionne pas
code généré
compilo
css
divers
documentation
doublon
Ce ticket est un doublon
ergonomie
espace privé
filtres et balises
formulaires
Inscription
installation
invalide
Ticket invalide
javascript
langues
LDAP
plugin
PostgreSQL
refusé
Ignoré, c'est comme Ca...
sécurité
traduction
à confirmer
No Label
accessibilité
amélioration
APIs
authentification
base de données
bug
code généré
compilo
css
divers
documentation
doublon
ergonomie
espace privé
filtres et balises
formulaires
Inscription
installation
invalide
javascript
langues
LDAP
plugin
PostgreSQL
refusé
sécurité
traduction
à confirmer
Milestone
Set milestone
Clear milestone
No items
No Milestone
Projects
Set Project
Clear projects
No project
Assignees
Assign users
Clear assignees
No Assignees
7 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.
No due date set.
Dependencies
No dependencies set.
Reference: spip/spip#5389
Reference in New Issue
There is no content yet.
Delete Branch '%!s(<nil>)'
Deleting a branch is permanent. It CANNOT be undone. Continue?
No
Yes
Le filtre
|plus
est documenté comme "arithmétique" et PHPdocumenté comme acceptant 2 arguments de typeint
.La fonction
plus
n'est toutefois pas typée, ce qui permet de lui passer autre chose que des entiers, des tableaux par exemple ; auquel cas il réalise le merge de ses arguments.C'est ce que fait par exemple une branche du plugin
favicon
dans ce code :Peut on officialiser cette possibilité, la PHPDocumenter et la documenter ?
Bonjour,
je trouve que ce n'est pas une bonne pratique d'avoir plusieurs façons d'aboutir au même résultat car cela peut prêter à confusion pour les utilisateurices et de la maintenance également pour les devs SPIP.
Comme ici utiliser |plus pour faire ce que |array_merge fait très bien.
Pour moi, c'est un hack (bidouille) qui n'est pas à documenter mais à corriger.
++
array_merge et + ne font pas la même chose sur les array : https://stackoverflow.com/questions/5394157/whats-the-difference-between-array-merge-and-array-array
Effectivement
+
n'est pas identique àarray_merge
dans le cas où des clés identiques existent dans les tableaux.Je suis du même avis que @touti => c'est un usage détourné à ne pas documenter.
Même avis que @touti et @b_b : c’est fait pour faire une addition (float ou int, je présume), rien d’autre. Pour typer le code comme cela (
int|float
), il faut PHP 8.0 minimum.L’usage là dans Favicon de
|plus
me semble plutôt malencontreux, et non compréhensible. Dans le cas d’usage mentionné,|array_merge
conviendrait.Tu pourrais aussi probablement faire quelque chose plus clair comme
Avant
Après
Le array_filter n’étant là que pour enlever les clés possiblement vides (mais je ne suis même pas sûr que ça soit nécessaire pour l’usage ensuite)...
Je sais pas si ce filtre à été pensé à la base pour faire uniquement des opérations sur des nombres, mais là le code actuel en fait un simple alias de l'opérateur
+
en php : https://git.spip.net/spip/spip/src/branch/master/ecrire/inc/filtres.php#L2157-L2159Je l'ai déjà vu utilisé plusieurs fois dans des cas où il y avait justement besoin de faire une union de 2 tableaux dans des squelettes, et non pas des merge, cf. doc php (en dehors de l'exemple donné au dessus).
Sans ça, beh pas moyen.
Donc ça me semble plutôt legit de garder cette possibilité (en tout cas ça casserait des choses si ça changeait).
Et de la phpdocumenter du coup aussi :p
Comme je le disais dans #5600,
|plus
permet des choses que|push
ou|array_merge
ne permettent pas :Sinon, il faut passer par une fonction PHP maison juste pour ça.
Je serai d'avis de garder cette particularité, qui colle au langage PHP, et de modifier les docs en conséquence.
Et oui, + et array_merge ne font pas la même chose, ce qui peut être trompeur, mais c'est au développeur de savoir ce qu'il fait et ce qu'il utilise.